我的查询运行良好,但是当我在包含多个重复成员的数组中提供$时,查询仅返回不同的值。我希望返回所有结果,无论它们是不同的还是重复的。这是我的疑问:
var ids = ["5648e64c0a3690ce57c0ada2","5648e64c0a3690ce57c0ada2","5648e64c0a3690ce57c0ada2","5648e64c0a3690ce57c0ada2"];
var sessionUsers =
yield new Promise(function (resolve, reject) {
users.col.aggregate([
{
$match: {
'_id': {
'$in': ids // <-- ids is an array which may or may not contain duplicate ids
}
}
},
{
$project: {
_id: 1,
pic: 1,
name: '$profile.name'
}
}
],
function (err, res) {
if (err === null)
resolve(res);
reject(err);
});
});
用户文档:
{
"_id" : ObjectId("5648e64c0a3690ce57c0ada2"),
"pic" : "karl.png",
"profile" : {
"name" : "Karl Morrison"
}
}
目前正在退回的内容:
[{
"_id" : ObjectId("5648e64c0a3690ce57c0ada2"),
"pic" : "karl.png",
"name" : "Karl Morrison"
}]
我希望返回以下内容(ids
数组中有4个元素):
[{
"_id" : ObjectId("5648e64c0a3690ce57c0ada2"),
"pic" : "karl.png",
"name" : "Karl Morrison"
},{
"_id" : ObjectId("5648e64c0a3690ce57c0ada2"),
"pic" : "karl.png",
"name" : "Karl Morrison"
},{
"_id" : ObjectId("5648e64c0a3690ce57c0ada2"),
"pic" : "karl.png",
"name" : "Karl Morrison"
},{
"_id" : ObjectId("5648e64c0a3690ce57c0ada2"),
"pic" : "karl.png",
"name" : "Karl Morrison"
}]
答案 0 :(得分:0)
您想要的是不可能的,因为聚合不会多次聚合单个文档。
即使有办法做到这一点,这也不是最好的做事方式,因为它会产生不必要的网络流量,因为同一个文件会多次从mongodb传输到你的应用程序。
如果您需要,我建议您将文档另外提取并在应用程序代码中复制它。