【问题标题】:mongo - extract subdocuments field and convert to arraymongo - 提取子文档字段并转换为数组
【发布时间】:2021-06-08 20:45:41
【问题描述】:

我的查询 (NOT AGGREGATION!) 使用 findOne() 返回此类文档:

{
    "_id": "ddd00000000000000cb00001",
    "title": "Title",
    "questions": [
        { "_id": "60bfc1afcd3d6b68d44b1e23" },
        { "_id": "60bfc1afcd3d6b68d44b1e27" },
        { "_id": "60bfc1afcd3d6b68d44b1e2b" }
    ]
}

如何将问题 _id 作为字符串而不是子文档直接放入数组中? 期望的结果:

{
        "_id": "ddd00000000000000cb00001",
        "title": "Title",
        "questions": [
            "60bfc1afcd3d6b68d44b1e23", 
            "60bfc1afcd3d6b68d44b1e27",
            "60bfc1afcd3d6b68d44b1e2b"
        ]
}

我更喜欢在没有聚合框架的情况下获得我的结果,但我希望看到这两种解决方案。 据我所知,我可以使用 $group 和 $push 实现目标,但我正在寻找更优雅的举动。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    如果没有聚合,您将不得不在客户端进行:

    let doc = db.test.findOne({});
    doc.questions = doc.questions.map(e=>e._id);
    

    通过聚合,您可以投影字段:

    db.test.aggregate([
       {$match:{}},
       {$limit:1},
       {$addFields:{questions:"$questions._id"}}
    ])
    

    Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      • 2021-10-27
      • 2015-01-10
      • 2012-02-04
      相关资源
      最近更新 更多