算数结果文档中的匹配值

时间:2019-07-12 09:19:21

标签: mongodb

我正在一个项目中查找相似类型的值,因此我查询数据库,并希望对匹配的值进行计数,以便可以使用计数最大的文档。

我已经写了几乎查询,但是无法计算$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' ] 
        }
    })

我想要匹配的文档以及每个文档对应的计数值

1 个答案:

答案 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