我正在一个项目中查找相似类型的值,因此我查询数据库,并希望对匹配的值进行计数,以便可以使用计数最大的文档。
我已经写了几乎查询,但是无法计算$in
数组中的匹配值
在下面的代码中,我想计算每个文档的匹配数组值
db.getCollection('combine_problems')
.find({
'answer':'United States',
'book_id':{
$nin:['103','102','101','105']
},
'choices': {
$in: ['species', 'new habitat', 'range of species','United States' ]
}
})
我想要匹配的文档以及每个文档对应的计数值
答案 0 :(得分:0)
如果您只想对每个choices
中的文档进行计数,则可以简单地对choices
进行分组并获得计数,但是如果要在count of choices
之后附加上述内容查询,您可能必须使用脚本来获得预期的输出。看一下下面的过程:
将上述查询结果存储在一个变量中,例如docs
并添加一个.toArray()
( ie仅当您的文档数量很少时,否则不要使用{{1} },只需在光标上执行forEach并在下面的forEach操作中创建一个新对象。)到查询的末尾,这将为您提供包含键toArray()
的对象数组。
然后运行另一个查询,其中
可以使用aggregation并在choices
上进行grouping,如下:
choices
这将给出所有选择的计数,并将db.getCollection('combine_problems').aggregate([
{
$match: {
$and: [
{ 'answer': 'United States' },
{'book_id': {$nin: ['103', '102', '101', '105']}},
{'choices': {$in: ['species', 'new habitat', 'range of species', 'United States']}
]
}
},
{
$group: { _id: "$choices", choice_count: { $sum: 1 } }
}])
附加到其上,并将结果存储在变量中,例如.toArray()
,您将在其中获得另一个包含2个键的对象数组,如{ {1}}和counts
。
稍后在第一个变量choices
上运行choice_count
,并将foreach
对象中所有匹配的docs
计数附加为:
choices