Mongodb如何返回重复/非独立

时间:2015-11-15 18:47:20

标签: mongodb mongodb-query aggregation-framework

我的查询运行良好,但是当我在包含多个重复成员的数组中提供$时,查询仅返回不同的值。我希望返回所有结果,无论它们是不同的还是重复的。这是我的疑问:

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"
}]

1 个答案:

答案 0 :(得分:0)

您想要的是不可能的,因为聚合不会多次聚合单个文档。

即使有办法做到这一点,这也不是最好的做事方式,因为它会产生不必要的网络流量,因为同一个文件会多次从mongodb传输到你的应用程序。

如果您需要,我建议您将文档另外提取并在应用程序代码中复制它。