产品系列:
[
{
"isActive": true,
"_id": "643bbdee68b521035e20c976",
"name": "lu",
"price": 123,
"userId": "643abd0dcce4df3b1a0c8fa7"
},
{
"_id": "643bbdd668b521035e20c972",
"name": "mu",
"price": 123,
"userId": "643abd0dcce4df3b1a0c8fa7",
"isActive": true,
"__v": 0
},
{
"isActive": true,
"_id": "643bbdbc68b521035e20c971",
"name": "nu",
"price": 123,
"userId": "643abd0dcce4df3b1a0c8fa7"
},
{
"_id": "643c2dc126211992b4ee8fd5",
"name": "pu",
"price": 123,
"userId": "643abd0dcce4df3b1a0c8fa7",
"isActive": true
}
]
子产品集合:
[
{
"_id": "643d7ed82cd5b5fcd7e81e02",
"name": "kkkk",
"phoneNum": 9543922499,
"productID": "643bbdee68b521035e20c976",
"user": "643abd0dcce4df3b1a0c8fa7",
"address": {
"address1": "243, bastin nagarsss",
"zipCode": 6250185
}
}
]
我的聚合函数:
aggregateLookup: async () => {
try {
let subProduct = await SubProduct.aggregate([
{
$lookup: {
from: "Product",
localField: "productID",
foreignField: "_id",
as: "product_Details"
}
}
]);
return subProduct;
} catch (error) {
throw new Error(error);
}
}
我的架构:
const subProduct = new mongoose.Schema({
name: {
type: String,
required: [true,'Name is Required...']
},
phoneNum: {
type: Number,
required: true,
validate: {
validator: (value) => {
return `${value}`.length === 10;
},
message: 'Should be 10 digit Number'
}
},
productID: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'Product'
},
user: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'User'
},
address: {
address1: String,
zipCode: Number
}
});
在架构中,我将产品 ID 类型设置为 ObjectID。在 aggregateLookup 函数中,我需要使用 $lookup 检索所有数据,我在产品文档中有相关产品,但它仍然返回一个空数组。
我的输出是 Product_Details 为空但在产品文档中有数据:
[
{
"_id": "643d7ed82cd5b5fcd7e81e02",
"name": "kkkk",
"phoneNum": 9543922499,
"productID": "643bbdee68b521035e20c976",
"user": "643abd0dcce4df3b1a0c8fa7",
"address": {
"address1": "243, bastin nagarsss",
"zipCode": 6250185
},
"product_Details": []
}
]
预期产出:
[
{
"_id": "643d7ed82cd5b5fcd7e81e02",
"name": "kkkk",
"phoneNum": 9543922499,
"productID": "643bbdee68b521035e20c976",
"user": "643abd0dcce4df3b1a0c8fa7",
"address": {
"address1": "243, bastin nagarsss",
"zipCode": 6250185
},
"product_Details": [
{
"isActive": true,
"_id": "643bbdee68b521035e20c976",
"name": "lu",
"price": 123,
"userId": "643abd0dcce4df3b1a0c8fa7"
}
]
}
]
请帮助我我犯了什么错误我是 mongodb 的新手。提前致谢...
问题肯定出在集合的名称上。
您使用了
from:"Product"
而不是您需要使用 products
这个词,因为您需要提供在数据库中形成的集合的确切名称。因为 mongoDB 会自动为集合名称分配多个单词。您可以通过转到 mongosh shell 和来检查集合名称
show dbs
use db_name
show collections
https://mongoplayground.net/p/_bp4jpzUHVg
我这里测试过