小编Luc*_*elo的帖子

聚合 $lookup 不返回元素原始数组顺序

查询返回元素在其集合中的放置顺序,忽略初始数组的顺序。这会影响我们系统的功能。是否有任何额外的命令可以将其按正确的顺序排列?有没有可用的解决方法?

下面是一个简单的例子:

Collection1 文档

{
  "_id":ObjectId("5c781752176c512f180048e3"),
  "Name":"Pedro",
  "Classes":[
    {"ID": ObjectId("5c7af2b2f6f6e47c9060d7ce") },
    {"ID": ObjectId("5c7af2bcf6f6e47c9060d7cf") },
    {"ID": ObjectId("5c7af2aaf6f6e47c9060d7cd") }
  ]
}
Run Code Online (Sandbox Code Playgroud)

Collection2 文件

{
  "_id":ObjectId("5c7af2aaf6f6e47c9060d7cd"),
  "variable1":"A"
},

{
  "_id": ObjectId("5c7af2b2f6f6e47c9060d7ce"),
  "variable1":"B"
},

{
  "_id": ObjectId("5c7af2bcf6f6e47c9060d7cf"),
  "variable1":"C"
}
Run Code Online (Sandbox Code Playgroud)

查询:

aggregate(
  pipeline = '[
  {"$match": {"_id": {"$oid": "5c781752176c512f180048e3"}}},
  {"$lookup": {"from": "collection2", "localField": "Classes.ID", "foreignField": "_id", "as": "Collection2_doc"}}
  ]'
)
Run Code Online (Sandbox Code Playgroud)

返回:

结果顺序:

[
    {
      "_id":ObjectId("5c7af2aaf6f6e47c9060d7cd"),
      "variable1":"A"
    },
    {
      "_id": ObjectId("5c7af2b2f6f6e47c9060d7ce"),
      "variable1":"B"
    },
    {
      "_id": ObjectId("5c7af2bcf6f6e47c9060d7cf"),
      "variable1":"C"
    }
]
Run Code Online (Sandbox Code Playgroud)

预期顺序(第一个文档数组顺序):

[
    {
      "_id": ObjectId("5c7af2b2f6f6e47c9060d7ce"),
      "variable1":"B"
    }, …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

10
推荐指数
1
解决办法
2509
查看次数