我有一个跟随的查询。
module.exports.list = (req, res) => {
let queryFilter = {};
let where = {};
if (req.query.filter) {
queryFilter = JSON.parse(req.query.filter);
}
let pipeLine = [];
if (queryFilter.lookupcompantype) {
pipeLine.push({ "$lookup": queryFilter.lookupcompantype });
}
if (queryFilter.unwind) {
pipeLine.push({ "$unwind": queryFilter.unwind });
}
if (queryFilter.where) {
pipeLine.push({ "$match": queryFilter.where });
}
if (queryFilter.skip || queryFilter.limit) {
pipeLine.push({ "$skip": queryFilter.skip });
pipeLine.push({ "$limit": queryFilter.limit });
} else if (queryFilter.all) {
pipeLine.push({ "$count": "total" });
}
Company.aggregate(pipeLine)
.then(list => res.json(list))
.catch(err => res.json(err));
};
如果pipeLine
不为空,则可以正常工作。如果pipeLine
为空数组[]
,则返回null。
我想知道为什么?
如果我使用robomongo
运行相同的查询,空数组正常工作
MongoDB shell version v3.6.2
MongoDB server version: 3.6.2
mongoose : 4.13.9
答案 0 :(得分:0)
在看不到输入的情况下很难说,但我的猜测是您在展开时缺少了preserveNullAndEmptyArrays
选项。请参见以下示例:
$unwind: {
path: '$someArray',
preserveNullAndEmptyArrays: true,
},
如果数组中没有要展开的项目,它将保留根对象。
请参阅: https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/