mongodb通过查询字段仅返回子文档
我有一个这样的结构:mongodb通过查询字段仅返回子文档,mongodb,mongoose,nested,subdocument,Mongodb,Mongoose,Nested,Subdocument,我有一个这样的结构: { "_id" : ObjectId("5b155aa3e7179a6034c6dd5b"), "pinnedKpi" : { "Ver01" : [ "130", "138", "122", "134" ], "Ver02" : [ "265", "263", "142", "264" ], "Ver03"
{
"_id" : ObjectId("5b155aa3e7179a6034c6dd5b"),
"pinnedKpi" : {
"Ver01" : [
"130",
"138",
"122",
"134"
],
"Ver02" : [
"265",
"263",
"142",
"264"
],
"Ver03" : [ ],
"Ver04" : [
"126",
"134",
"122",
"138"
]
},
"email" : "john@doe.ca",
是否可以执行类似“仅返回电子邮件=john@doe.ca和pinnedKpi.Ver01-->[“130”、“138”、“122”、“134”]
只需使用以下命令:
db.collection.find({ // find all documents
"email": "john@doe.ca" // where the "email" field equals some value
}, {
"_id": 0, // do not return the "_id" field (included by default)
"pinnedKpi.Ver01": 1 // only return the "pinnedKpi.Ver01" field
})
如果数组不需要是响应的根元素,则可以使用以下查询返回带电子邮件条件的pinnedKpi.Ver01数组以及pinnedKpi数组中是否存在Ver01元素:
db.test1.find(
{"email" : "john@doe.ca", "pinnedKpi.Ver01" : {"$exists" : true}},
{"pinnedKpi.Ver01" : 1}
);
哪个输出:
{
"_id" : ObjectId("5b155aa3e7179a6034c6dd5b"),
"pinnedKpi" : {
"Ver01" : [
"130",
"138",
"122",
"134"
]
}
}
如果数组结果需要是根元素,则可以使用聚合框架来实现这一点:
db.test1.aggregate(
[
{
$match: {email:"john@doe.ca","pinnedKpi.Ver01":{$exists:true}}
},
{
$replaceRoot: {
newRoot: "$pinnedKpi"
}
},
{
$project: {
Ver01:1
}
},
]
);
输出:
{
"Ver01" : [
"130",
"138",
"122",
"134"
]
}
您希望查询返回的确切内容是什么?上面发布的数组我想说返回“email”所在的数组:john@doe.ca,而pinnkedKpi是Ver01这里1的意义是什么-->“pinnedKpi.Ver01”:1查询的第二部分(“_id”:0,“pinnedKpi.Ver01”:1)代表投影指令。0可以为假,1可以为真。这里默认包含的“_id”被排除,pinnedKpi.Ver01被手动包含在投影中。在同一个示例中,如果我向它传递一个变量,如
pinnedKpi.Ver0${version}
它即使在控制台上也不起作用。记录相同的字符串,就像我硬编码一样。请您尝试一下,这样我们就可以看到有什么问题了。另外,请让我们知道您使用的是哪种语言/客户端。在上面的同一个示例中,如果我向它传递一个变量,如pinnedKpi.Ver0${version},它即使在控制台上也无法工作。记录相同的字符串,就像我硬编码它一样。。如何传递变量