Mongodb 计算结果文档中匹配值的数目
我在一个项目中工作,我想找到类似类型的值,所以我查询我的数据库,我想计算匹配的值,以便我可以使用具有最大计数的文档 我已经编写了几乎所有的查询,但无法计算Mongodb 计算结果文档中匹配值的数目,mongodb,Mongodb,我在一个项目中工作,我想找到类似类型的值,所以我查询我的数据库,我想计算匹配的值,以便我可以使用具有最大计数的文档 我已经编写了几乎所有的查询,但无法计算$in数组中的匹配值 在下面的代码中,我想计算每个文档的匹配数组值 db.getCollection('combine_problems') .find({ 'answer':'United States', 'book_id':{ $nin:['103','102','101',
$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' ]
}
})
我想要匹配的文档和每个文档对应的计数值如果您只想获得每个
选项
中的文档计数,您只需在选项
上进行分组并获得计数,但是如果要在上述查询中附加选项计数
,您可能需要使用脚本获取预期的输出。请看下面的流程:
将上述查询结果存储在一个变量中,比如说docs
,并在查询结束时添加一个.toArray()
(也就是说,仅当您有少量文档时,不要使用toArray()
,只需在光标上执行forEach操作,并在下面的forEach操作中创建一个新对象),这将为您提供一个包含键选项的对象数组
然后运行另一个查询,其中
可以在选项上使用和执行以下操作:
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()
附加到它,并将结果存储在一个变量中,比如说计数
,在该变量中,您将获得另一个包含两个键的对象数组,如选项
和选项_计数
稍后在第一个变量docs
上运行foreach
,并将counts
对象中所有匹配的选项添加为:
docs.forEach(function(obj){
var choice = obj['choices'];
var choice_value = 0;
counts.forEach(function(choice){
if(choice['_id'] == choice)
{
choice_value = choice['choice_count'];
break;
}
})
obj['choice_count']=choice_value;
})
//to check if you have the count in the same document use print.
print(JSON.stringify(docs));
如果您只想获得每个选项中的文档计数
,您只需在选项
上进行分组即可获得计数,但如果您想在上述查询中附加选项计数
,则可能需要使用脚本来获得预期的输出。请看下面的流程:
将上述查询结果存储在一个变量中,比如说docs
,并在查询结束时添加一个.toArray()
(也就是说,仅当您有少量文档时,不要使用toArray()
,只需在光标上执行forEach操作,并在下面的forEach操作中创建一个新对象),这将为您提供一个包含键选项的对象数组
然后运行另一个查询,其中
可以在选项上使用和执行以下操作:
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()
附加到它,并将结果存储在一个变量中,比如说计数
,在该变量中,您将获得另一个包含两个键的对象数组,如选项
和选项_计数
稍后在第一个变量docs
上运行foreach
,并将counts
对象中所有匹配的选项添加为:
docs.forEach(function(obj){
var choice = obj['choices'];
var choice_value = 0;
counts.forEach(function(choice){
if(choice['_id'] == choice)
{
choice_value = choice['choice_count'];
break;
}
})
obj['choice_count']=choice_value;
})
//to check if you have the count in the same document use print.
print(JSON.stringify(docs));
请参考MongoDB的官方文档请参考MongoDB的官方文档查询并没有给出某些应用程序中类似选择的准确计数document@Anujtyagi通过
query'检查分组的结果,它应该给你所有选择的结果和它们的计数。查询没有给出在某些情况下类似选择的准确计数document@Anujtyagi检查groupby
query'的结果,它会给出所有选择的结果及其计数。