我在mongodb中有一个people
集合,如下所示。
MongoDB版本:4.0.13
{
"_id" : ObjectId("5dcbeb97e184e0f527c6a3e7"),
"name" : "nithin",
"age" : 35.0,
"addresses" : [
{
"street" : "xyz",
"city" : "Tvm"
},
{
"street" : "pqr",
"city" : "KLM"
},
{
"street" : "abc"
}
]
}
{
"_id" : ObjectId("5dcbebe4e184e0f527c6a3e8"),
"name" : "akash",
"age" : 21.0,
"addresses" : [
{
"street" : "lon",
"city" : "London"
},
{
"street" : "par",
"city" : "paris"
},
{
"street" : "abc"
}
]
}
db.getCollection('People').aggregate([
{
$project:
{
"name":1,
"age":1,
"addresses":
{
$filter:
{
input:"$addresses",
as:"address",
cond:{$not:["$$address.city"]}
}
}
}
}
])
$filter:
{
input:"$addresses",
as:"address",
cond:{"$exists":["$$address.city":true]}
}
在这种情况下不需要有聚合。您可以使用find和$elemmatch运算符:
db.people.find({
addresses: {$elemMatch : {city: {$exists: false}}}
})
但是如果要使用聚合,则可以对同一查询进行匹配:
db.people.aggregate([
{$match: {addresses: {$elemMatch : {city: {$exists: false}}}}}
])
或者,您也可以像下面所示那样进行操作,但我假设elemMatch的工作速度会更快:
db.people.aggregate([
{$unwind: '$addresses'},
{$match: {"addresses.city" : {$exists: false}}}
{$group: { _id : '$_id', addresses: {$addToSet: "$addresses"}}}
])
抱歉发了这么长的帖子! 我有一个Mongo收藏,包含以下文档: 我想查询这些文档,并返回每个名称的最大值条目,因此我想要的结果集(顺序无关紧要)是: 如果我想在C#中做完全相同的事情,我会使用: 使用聚合管道,我已经达到了: 这给了我以下结果集: 如您所见,我有一个文档数组,每个文档都包含一个“_id”字段(名称)和一个“highest”字段(实际文档)。 这将用C表示为: 我想知道的是,是否可以
我有一个包含嵌套文档集合的文档: 映射如下所示: 我想做的是下一个聚合: 通过这样的查询,我得到的结果如下所示: 但我想要的是,只有带有键轮的结果才会出现在结果存储桶中(或与whe搜索字符串匹配的任何其他结果)。 希望问题足够清楚。我做错了什么?是否有任何建议或更改数据结构或查询? UPD:添加my\u custom\u analyzer以供参考:
我有一个四阶段聚合查询,其形式为match->group->project->sort。聚合工作正常,并生成如下所示的数组。 下面是我的聚合查询。我有没有办法只显示“计数”字段大于500的结果?我试图添加到项目阶段,但没有运气。
我在lexer语法文件中编写并用antlr4编译它。上面说 看来“filter”只适用于ANTLR3 我查了wikihttp://www.antlr.org/wiki/display/antlr4/options,没有找到答案。“filter”关键字也不在源文件https://github.com/antlr/antlr4/blob/master/tool/src/org/antlr/v4/too
我想过滤掉字段'a'等于'a'的文档,同时我想对字段'a'进行刻面处理,当然不包括前面的过滤器。我知道您可以将筛选器放在查询的“外部”,以便在不应用该筛选器的情况下获得方面,例如: 弹性搜索 索尔尔 也就是说,对于方面A,我希望保留除A:A以外的所有过滤器,对于方面B,我希望保留除B:B以外的所有过滤器,以此类推。最明显的方法是执行n个查询(n个方面中的每一个),但我不想这样做。
我有以下收藏: 我试图将电影(及其所有细节)与用户状态和对该电影的感觉相匹配,并使用聚合: 其中返回: 我希望的结果是匹配user_status中的第一部电影,以获得最终结果: 我想我的下一步是: 但是它不起作用——不确定这个$addFields是否正确,我知道的一个问题是,我的第一个_id是一个ObjectId,第二个似乎是一个字符串。