我想从MongoDB中的文档中检索子文档。我有以下文档:
{
"_id" : "10000",
"password" : "password1",
"name" : "customer1",
"enabled" : true,
"channels" : [
{
"id" : "10000-1",
"name" : "cust1chan1",
"enabled" : true
},
{
"id" : "10000-2",
"name" : "cust1chan2",
"enabled" : true
}
]
}我想要的结果是:
{
"id" : "10000-1",
"name" : "cust1chan1",
"enabled" : true
}但是,到目前为止,我能做的最好的事情是使用以下查询:
db.customer.find({"channels.id" : "10000-1"}, {"channels.$" : 1, "_id" : 0})但这给了我以下结果:
{
"channels" : [
{
"id" : "10000-1",
"name" : "cust1chan1",
"enabled" : true
}
]
}有没有人知道有没有可能写一个能给我想要的结果的查询?任何帮助都将不胜感激。
发布于 2014-01-14 20:32:58
您可以使用聚合框架来完成此任务。查询将如下所示:
db.customer.aggregate([
{$unwind : "$channels"},
{$match : {"channels.id" : "10000-1"}},
{$project : {_id : 0,
id : "$channels.id",
name : "$channels.name",
enabled : "$channels.enabled"}}
])发布于 2018-09-10 23:08:18
使用MongoDB 3.4.4和更高版本,聚合框架提供了许多运算符,您可以使用这些运算符返回所需的子文档。
考虑运行一个聚合管道,该管道使用单个阶段将筛选出的子文档提升到顶层,并替换所有其他字段。
过滤子文档需要运算符,该运算符根据指定的条件选择要返回的数组的子集,即返回一个只包含符合条件的元素的数组。然后,可以使用运算符将单个数组元素转换为文档
总的来说,运行此聚合操作将产生所需的结果:
db.customer.aggregate([
{ "$replaceRoot": {
"newRoot": {
"$arrayElemAt": [
{ "$filter": {
"input": "$channels",
"as": "channel",
"cond": { /* resolve to a boolean value and determine if an element should be included in the output array. */
"$eq": ["$$channel.id", "10000-1"]
}
} },
0 /* the element at the specified array index */
]
}
} }
])输出
{
"id" : "10000-1",
"name" : "cust1chan1",
"enabled" : true
}https://stackoverflow.com/questions/21113543
复制相似问题