【问题标题】:How to get all subdocuments _id into variable如何将所有子文档 _id 放入变量中
【发布时间】:2019-08-18 12:34:07
【问题描述】:

我正在尝试将家庭子文档 _ids 设置为变量。

这是我的架构:

families: [
    {
      _id: {
        type: mongoose.Types.ObjectId
      },
      name: {
        type: String
      },
      relation: {
        type: String
      }
    }
  ]

问题是,我可以让父级的 _id 显示在变量内部,但是当我尝试获取家庭 _ids 时,它在控制台日志中显示 undefined

将家庭子文档 _ids 放入变量的正确查询是什么?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    请试试这个:

    db.yourCollection.aggregate([
        { $unwind: '$families' },
        { $project: { Ids: '$families._id' } }, { $group: { '_id': '$_id', subDocumentsIDs: { $push: '$Ids' } } }
    ])
    

    输出:

    /* 1 */
    {
        "_id" : ObjectId("5d58d3205a0d22d3c85d16f1"),
        "subDocumentsIDs" : [ 
            ObjectId("5d570b350e2fb4f72533d512"), 
            ObjectId("5d570b350e2fb4f71533d510"), 
            ObjectId("5d570b350e2fb4172533d511")
        ]
    }
    
    /* 2 */
    {
        "_id" : ObjectId("5d58d3105a0d22d3c85d1591"),
        "subDocumentsIDs" : [ 
            ObjectId("5d570b350e2fb4f72533d312"), 
            ObjectId("5d570b350e2fb4f71533d310"), 
            ObjectId("5d570b350e2fb4172533d311")
        ]
    }
    

    请将此视为一个基本示例,如果需要,请继续进行增强,例如 $unwind 在早期阶段会影响性能,如果您的集合是大型数据集,但您可以通过使用 @ 轻松避免这种情况987654324@ 作为第一阶段,正如您所说,您可以获取父 _id 然后在$match 中使用它来过滤文档

    【讨论】:

    • 抱歉回复晚了,回到代码。它确实有效,我对 NoSQL 尤其是 mongo 很新,我自己的项目可以学习 MERN 堆栈,这个 $unwind 有很大帮助。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 2013-07-07
    • 1970-01-01
    • 2012-05-05
    • 2017-10-28
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    相关资源
    最近更新 更多