查询时,Mongodb仅从文档中获取匹配对象

时间:2018-12-26 10:45:36

标签: mongodb

我有一个来自mongoimport的mongodb数据库,看起来像这样

{
"_id" : ObjectId("5c209db2f6ba74c0f93709b7"),
"issues" : [ 
    {
        "id" : 20393,
        "project" : {
            "id" : 309,
            "name" : "Name 1"
        }
    },
    {
        "id" : 30392,
        "project" : {
            "id" : 250,
            "name" : "Name 2"
        }
    }
]

}

我使用以下查询:

db.tickets.find({"issues.project.id":309})

返回整个文档。 我尝试使用

db.tickets.find( { "issues.project.id":309  }, {"issues":1} )

但是我得到了相同的结果,或者我只是想要列表中匹配的对象而不是整个文档。

在mongodb中是否可能,还是应该更新数据库的结构?

感谢所有人

2 个答案:

答案 0 :(得分:1)

通过更新投影,您可以根据需要收集数据。您可以这样使用:

db.tickets.find({
  "issues.project.id": 309
},
{
  "issues.$": 1
})

答案 1 :(得分:1)

如果查找字段不是唯一的,这是一种较为安全的方法。我们使用过滤后的版本“覆盖”原始issues数组:

db.foo.aggregate([
{$match: {"issues.project.id": 309}}
,{$project: { issues: { $filter: {
            input: "$issues",
            as: "z",
            cond: { $eq: [ "$$z.project.id", 309 ] }
        }}
}}