Mongoose-从一系列子图表中获取单个字段



我有一个文档, Model这样:

{
    name: String,
    user: String,
    components: [{
      alias: String,
      name: String,
      ...etc...
    }]
}

我想制定一个仅返回给定文档的component.alias数组的响应。例如,如果我有:

{
  name: "doc1",
  components: [{alias: "alias1", ...}, {alias: "alias2", ...}]
}

我想最终得到["alias1", "alias2"]

到目前为止,我有:

    Model.findById(
         modelId,
         { "components.alias": 1, _id: 0 },
         (err, docs) => {
            console.log(docs)
         }
      );

但这给了我:

{
    "components": [
        {
            "alias": "alias1"
        }
    ]
}

有什么想法?

使用汇总为此,对此进行查询。

db.getCollection('Model').aggregate([
    { "$unwind": "$components" },
     { "$group": { "_id": "$components.alias" }}
]).map(function(el) { return el._id })

node.js代码

Model.aggregate([
            { "$match": { "name": "doc1" } }, // any condition
            { "$unwind": "$components" },
            { "$group": { "_id": "$name", components: { $push: "$components.alias" } } }
        ]).then((data)=>console.log(data))

输出:

{
    "_id": "doc1",
    "emails": [
        "alias1",
        "alias2"
    ]
}

最新更新