我看到类似但没有解决问题。这就是我再次发布问题的原因。这是我的猫鼬模式
'use strict';
//Importing packages
const Mongoose = require('mongoose');
//Declaring schema
const Schema = Mongoose.Schema({
moduleName : {type: String, unique: true},
parentModule: {type: Mongoose.Schema.Types.ObjectId, ref: 'module'},
status : {type: Number, default: 0},
sortOrder : {type: Number, default: 1},
createdBy : {type: Mongoose.Schema.Types.ObjectId, ref: 'admin'},
},
{
timestamps: true
});
//Exporting packages
module.exports = Mongoose.model('module', Schema);
在我的集合中,parentModule列再次引用相同的集合。
当我使用$ unwind输出聚合函数时,输出数据为空。我的收藏品有一对一的关系。因此,检索父模块必须是对象而不是数组。这就是我使用$ unwind的原因。但它显示空洞。当我删除$ unwind时,它会显示数据。
这是我的代码:
const query = ModuleModel
.aggregate([
{
$match: {parentModule: {$ne: null}}
},
{
$project: {
parentModule: {$cond: [{$eq: }]}
}
},
{
"$lookup": {
"from": "modules",
"localField": "parentModule",
"foreignField": "_id",
"as": "parents"
}
},
{
"$unwind": {
path: "$parent",
preserveNullAndEmptyArrays: true
}
},
], function(error, data){
console.log(data);
if(error)
{
console.log(error);
return response(error);
}
else
{
console.log("test");
return response({data: data});
}
});
当我删除$ unwind时,我的输出看起来像这样
{
"data": [
{
"_id": "58b509642fb32d1a1436efdd",
"updatedAt": "2017-02-28T05:23:48.531Z",
"createdAt": "2017-02-28T05:23:48.531Z",
"moduleName": "roles1",
"parentModule": "58b3d64244307f3e2fddd1e1",
"sortOrder": 1,
"status": 0,
"__v": 0,
"parents": [
{
"_id": "58b3d64244307f3e2fddd1e1",
"updatedAt": "2017-02-27T07:33:22.396Z",
"createdAt": "2017-02-27T07:33:22.396Z",
"moduleName": "roles",
"parentModule": null,
"sortOrder": 1,
"status": 0,
"__v": 0
}
]
}
]
}
这里我的父列显示为一个数组,我看到了这个link。他们使用$ unwind将对象数组更改为对象。但我没有得到同样的输出。有些parentModule在集合上可以为null。
如果有人知道这个帮助我。