arrays - 如何仅在 Mongoose 中使用聚合来填充嵌套在对象数组中的字段?

标签 arrays mongodb mongoose aggregation nested-object

我试图在数组中填充一个深层嵌套的对象很长一段时间,但运气不佳。我尝试展开数组,但结果数组被转换为对象而不是数组。

let aggQuery: any = [
            { $match: {} }
    
            {
                $lookup: {
                    from: "tribe-answers", localField: "answers", foreignField: "_id", as: "answers"
                }
            },
             {
                "$unwind": {
                "path": "$answers.createdBy",
                "preserveNullAndEmptyArrays": true
                }
            },
            {
            $lookup: {
                from: "users", localField: "answers.createdBy", foreignField: "_id", as: "answers.createdBy"
            }
            },
            
        ];

预期输出

answers = [
 { _id,
  content
  createdBy{
     _id
     firstname
     lastname
  }
 },
 { _id,
  content
  createdBy{
     _id
     firstname
     lastname
  }
 }
]

返回的输出

answers = {
   _id,
  content
  createdBy{
     _id
     firstname
     lastname
  }
 }

上面的查询确实填充了createdBy字段,但将数组转换为对象。我需要的是填充答案数组的每个元素中的createdBy 字段。感谢您的帮助。

最佳答案

db.getCollection('tribe-posts').aggregate([
    { 
        "$lookup": {
           "from": "tribe-answers",
            "let": {answerIds: "$answers"},
            "pipeline": [
                { "$match": { "$expr": { "$in": [ "$_id", "$$answerIds" ] } } },
                {$lookup: { from: "users", localField: "createdBy", foreignField: "_id", as: "createdBy" }},
                {"$unwind": {"path": "$createdBy","preserveNullAndEmptyArrays": true} }
                
            ],
            "as": "answers"
        }    
    },
])

这将产生预期的输出

answers = [
 { _id,
  content
  createdBy{
     _id
     firstname
     lastname
  }
 },
 { _id,
  content
  createdBy{
     _id
     firstname
     lastname
  }
 }
]

关于arrays - 如何仅在 Mongoose 中使用聚合来填充嵌套在对象数组中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68767519/

相关文章:

c - 错误检查未正确显示

java - 将元素插入数组索引越界java

mongodb - 对象 xxx 的属性 'deleteMany' 不是 MongoDb 中的函数

java - MongoDB Java 插入抛出无法找到类 org.variabel.BsonDocument 的编解码器

javascript - MongoDB - $set 更新或推送数组元素

c - 如何从 C 中的结构复制字符?

javascript - 平均查找器始终打印 “0”

sql - PostgreSQL 相当于 MongoDB 的 Mongoose?

node.js - 使用 Node 连接到 MongoDB 服务器在本地主机上没有响应

javascript - 用于在集合中获取子项和孙子项的 Mongoose 查询