mongodb 通过查询字段只返回子文档
Posted
技术标签:
【中文标题】mongodb 通过查询字段只返回子文档【英文标题】:mongodb return just the subdocument by querying the field 【发布时间】:2018-12-14 06:52:22 【问题描述】:我有这样的结构:
"_id" : ObjectId("5b155aa3e7179a6034c6dd5b"),
"pinnedKpi" :
"Ver01" : [
"130",
"138",
"122",
"134"
],
"Ver02" : [
"265",
"263",
"142",
"264"
],
"Ver03" : [ ],
"Ver04" : [
"126",
"134",
"122",
"138"
]
,
"email" : "john@doe.ca",
是否可以进行查询,例如仅返回 email = john@doe.ca 和 pinnedKpi.Ver01 的数组 ---> ["130","138","122","134"]
【问题讨论】:
您希望查询返回的具体内容是什么? 上面贴的数组 我想说返回“email”的数组:“john@doe.ca”,pinnkedKpi 是ver01 【参考方案1】:就用这个吧:
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
)
【讨论】:
这里的1是什么意思-->"pinnedKpi.Ver01": 1 查询的第二部分("_id": 0,"pinnedKpi.Ver01": 1)代表投影指令。 0 可以为假,1 可以为真。这里排除了默认包含的“_id”,并在投影中手动包含了pinnedKpi.Ver01。 在同一个例子中,如果我像pinnedKpi.Ver0$version
一样向它传递一个变量,它不起作用,即使它控制台记录相同的字符串,就像我硬编码它一样
请您尝试一下,以便我们看看出了什么问题。另外,请告诉我们您使用的语言/客户端。【参考方案2】:
如果数组不需要是响应的根元素,您可以使用以下查询返回 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"
]
【讨论】:
在你上面的同一个例子中,如果我将一个变量传递给它,比如 pinnedKpi.Ver0$version 它不起作用,即使它控制台记录相同的字符串,就像我硬编码它一样..如何传递变量以上是关于mongodb 通过查询字段只返回子文档的主要内容,如果未能解决你的问题,请参考以下文章