我有一个来自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中是否可能,还是应该更新数据库的结构?
感谢所有人
答案 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 ] }
}}
}}