Mongodb 猫鼬群居
我有用户文档和类别文档,它们连接到商店文档,看起来像Mongodb 猫鼬群居,mongodb,mongoose,mongodb-query,aggregation-framework,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,我有用户文档和类别文档,它们连接到商店文档,看起来像 var ShopSchema = mongoose.Schema( { shopName: { type: String, required: [true, 'A Shop must have name'], }, phone: { type: String, validate: [validator.isMobilePhone,"Phone n
var ShopSchema = mongoose.Schema(
{
shopName: {
type: String,
required: [true, 'A Shop must have name'],
},
phone: {
type: String,
validate: [validator.isMobilePhone,"Phone number is not a valid number"],
required: [true, 'A Shop must have hepline number'],
},
shopStatus: {
type: Boolean,
default: false,
select: false
},
managerId:{
type: mongoose.Schema.ObjectId,
ref:'User',
require: [true,'Shop must have to a manager!']
},
createdAt:{
type:Date,
default: Date.now()
},
shopCategory:{
type: mongoose.Schema.ObjectId,
ref:'Category',
require: [true,'Shop must have a Category!']
},
},
{
toJSON: { virtuals: true },
toObject: { virtuals: true }
}
);
const Shop = mongoose.model("Shop", ShopSchema);
现在,我正在编写一个查询,以使用填充的Manager和Category数据获取Manager shop(groupBy managerId)。但我每次都得到空数组
const doc = await Shop.aggregate([
{
$match: { shopStatus: {$ne: false} }
},
{
$group: {
_id:'$managerId',
numofShop: {$sum: 1},
shopCategory: {$first: "$shopCategory"}
}
},
{
$lookup: {
from: "User",
localField : "_id",
foreignField: "_id",
as: "Manager"
}
},
{
$lookup: {
from: "Category",
localField : "shopCategory",
foreignField: "_id",
as: "Category"
}
},
])
下面是我的最终结果,但是这是一个空数组
{
"_id": "5f467660f630e804ec07fad8",
"numofShop": 2,
"Manager": [],
"Category": []
},
{
"_id": "5f44d2f4ff04993b40684bf9",
"numofShop": 1,
"Manager": [],
"Category": []
}
我想找到groupBy managerId(它的所有者)的所有商店。managerId字段引用创建此店铺的用户文档。我想要这样的数据
{
"_id": "5f44d2f4ff04993b40684bf9",
"Manager": {},//this is populated through User Schema
"numofShop": 1,
"Shop": [
{
"shopName":"Grocery Shop",
"phone" : "111111",
"shopCategory" :{"_id": "","name":"Electronics"}
}
]
}
.....
.....
在这里查找示例数据
商店-
由两个用户创建的3个店铺
用户-
类别-有两个修复程序
- 在第二次查找中,您在localField中没有
字段,因为您没有在shopCategory
中定义$group
shopCategory
- 在用户集合的第一次查找中,没有
字段,并且您已在managerId
字段中分配了,然后您可以在localField中使用\u id
\u id
对于第二次编辑,您不能在“查找方法”中为“填充”设置条件,如何在“填充”中设置条件,您可以按照和进行操作。谢谢。我还有另一个查询“我有一个用户文档”,它具有一组对象ID。我正在写这个问题。我希望所有用户都在库存、交付和帐户中扮演角色。const doc=wait User.find({“roles.name”:{$in:[“库存经理”、“交货经理”、“客户经理”]})。填充(“角色”);这是返回空数组如果不查看您的架构,我无法预测。您是否可以确认此数据并查询其是否正确,或者请提供所有集合的数据您是否可以立即确认。如果你愿意,第二条路
{
$group: {
_id:'$managerId',
numofShop: {$sum: 1},
shopCategory: { $first: "$shopCategory" } // define here
}
},
{
$lookup: {
from: "User",
localField : "_id", // change this from managerId
foreignField: "_id",
as: "Manager"
}
},