Mongodb 按值排序,其中值位于另一个集合中,ID存储在应用排序的集合中

Mongodb 按值排序,其中值位于另一个集合中,ID存储在应用排序的集合中,mongodb,mongodb-query,Mongodb,Mongodb Query,我有下一个情况 在parameterscollection中,我有一些文档,它们具有键组,其中值是另一个集合中文档的id。这类似于引用另一个集合的外键 在另一个集合中,我们有与存储在主参数集合中的“\u id”相对应的文档 以下是参数集合中的一个示例文档: { "_id" : ObjectId("538726134ba2222c0c0248b6"), "name" : "Potta", "groups" : [ "54c91b2c4ba222182e63

我有下一个情况

parameters
collection中,我有一些文档,它们具有键
,其中值是另一个集合中文档的
id
。这类似于引用另一个集合的外键

在另一个集合中,我们有与存储在主
参数
集合中的“\u id”相对应的文档

以下是
参数
集合中的一个示例文档:

{
    "_id" : ObjectId("538726134ba2222c0c0248b6"),
    "name" : "Potta",
    "groups" : [ 
        "54c91b2c4ba222182e636943"
    ]
}
我需要按组排序,但正如您在主集合组中看到的,值是ID,但我想按组名排序

以下是来自
组的一个样本集合
集合

{
    "_id" : ObjectId("54c91b2c4ba222182e636943"),
    "name" : "Group 01",
}
这是否可以在Mongo DB中实现

谢谢,数据如下

> db.parameters.find({})
{ "_id" : ObjectId("56cac0cd0b5a1ffab1bd6c12"), "name" : "potta", "groups" : [ "
123", "234" ] }
> db.groups.find({})
{ "_id" : "123", "name" : "Group01" }
{ "_id" : "234", "name" : "Group02" }
mongodb 3.2
下,您可以执行以下操作:对同一数据库中的未归档集合执行左外部联接,然后对组名进行
排序,如下所示

> db.parameters.aggregate([
                          {$unwind: '$groups'}, 
                          {$lookup: {
                                    from: 'groups', 
                                    localField: 'groups', 
                                    foreignField: '_id', 
                                    as: 'gr'}},
                           {$sort: {'gr.name': 1}}])

对于
3.2
,请尝试按以下步骤操作

> var pa = db.parameters.find({});
> pa.forEach(function(doc) {
                var ret = db.groups
                            .find({_id: {$in: doc.groups}})
                            .sort({name: 1}); 
                ret.forEach(printjson)
});

或者你可以通过下面的方式来完成


最终,排序的结果将在
联接的
集合中。

我们使用的mongo 3.0.3mongo-3.0只能进行单个集合聚合。您编写了两个示例。第一个用于大于3.2版本,第二个用于低于3.2版本?@PottaG,是的,第二个用于低于3.2版本。对于doc.groups,我将获得键值对,因为组是数组。我需要该数组的值,但不确定如何实现该值。无论如何,谢谢你@赞格
{
    "_id" : ObjectId("54c91b2c4ba222182e636943"),
    "name" : "Group 01",
}