我正在尝试从MongoDB中的数组中获取一个元素。我认为聚合过滤器是正确的应用程序。但是我已经尝试了一百万次,我仍然找不到问题所在。你能帮我吗?
MongoDB示例数据:
{
"_id" : 12,
"items" : [
{
"columns" : [
{
"title" : "hhh",
"value" : 10
},
{
"title" : "hahaha",
"value" : 20
}
]
},
{
"columns" : [
{
"title" : "hiii",
"value" : 50
}
]
}
]
}
我的解决方案:
db.myCollection.aggregate([
{
$project: {
items: {
$filter: {
input: "$items",
as: "item",
cond: { $eq: [ "$$item.columns.title", "hahaha" ]}
}
}
}
}
]).pretty()
我的结果:
{
"_id" : 15,
"items" : [
{
"columns" : [ ]
},
{
"columns" : [ ]
}
]
}
预期结果:
{
"_id" : 15,
"items" : [
{
"columns" : [
{
"title" : "hahaha",
"value" : 20
}
]
},
{
"columns" : []
}
]
}
我已经检查了Mongo参考:https://docs.mongodb.com/manual/reference/operator/aggregation/filter/#example
MongoDB版本:3.4.1
测试环境:Mongo Shell
您需要使用数组操作符来筛选子文档中的子数组。此外,您还应该在聚合管道阶段中执行此操作,以便在需要时自动在查询结果中包括所有其他字段。
您也可以像以前那样将$添加字段阶段替换为$项目,但在这种情况下,您需要明确包括所有其他字段。
let value = "hahaha";
db.coll.aggregate([
{
"$addFields": {
"items": {
"$map": {
"input": "$items",
"as": "item",
"in": {
"columns": {
"$filter": {
"input": "$$item.columns",
"as": "elt",
"cond": { "$eq": [ "$$elt.title", value ] }
}
}
}
}
}
}
}
])
问题内容: 我在子文档中有这样的数组 我可以过滤> 3的子文档吗 我的预期结果如下 我尝试使用,$elemMatch但返回数组中的第一个匹配元素 我的查询: 结果返回数组中的一个元素 我尝试使用聚合与$match但不起作用 返回数组中的所有元素 我可以过滤数组中的元素以获得预期结果吗? 问题答案: 使用是正确的方法,但在应用数组之前需要先对数组进行过滤,以便可以过滤单个元素,然后用于将其放回原处:
任何人都可以帮助我查询mongo以释放数组,我使用的是mongdb本机驱动程序我的收集文档如下,也请忽略我的objectId它只是示例 而我的预期产出是 我只想解开我的数组,在一个查询中的爱好描述之间添加一个逗号,谢谢你的帮助
问题内容: 我有一个包含整数数组的字段,例如: 我想过滤结果,以使价格至少包含介于以下之间的值列表之一: 由于价格字段中的`[20002,30000] 问题答案: Elasticsearch始终认为字段可以包含值列表,因此,范围过滤器应该起作用。如果任何值与范围匹配,它将被过滤。 您可以将该过滤器用作过滤查询的一部分: 但是,过滤查询在2.0中已弃用,因此,如果您使用的是2.0,则最好将布尔查询与
问题内容: 我正在尝试对数组中的值进行聚合,并且还过滤由前缀返回的存储桶。不知道这是否可行,或者我滥用过滤桶。 3份文件: 目的是获取带有字母B开头颜色的文档数量: 不幸的是,返回的结果包括Red。显然是因为带有红色的文档仍然按过滤器匹配,因为它们也具有蓝色和/或黑色。 有没有一种方法可以只过滤存储桶结果? 问题答案: 尝试此操作,它将过滤为存储桶本身创建的值:
如何通过子数组值筛选数组?在这个例子中,我有下面的API请求数组,并且希望只构建一个id为2的新数组,该数组具有name=Other name,因为我的过滤器被设置为Other name 是否有方法执行并填充新数组?
我是新来的mongo。我有以下收藏。 文件: 请求: 文档集合中的typeId是文档类型的id,其中请求中的typeId是也可以为空的外部字段。如何获得以下输出。