Mongodb查找->;insert和count有不同的结果

Mongodb查找->;insert和count有不同的结果,mongodb,Mongodb,我试图通过查询并将结果存储在较小的集合中来过滤数据集合。但是,使用count()找到的记录数与集合中的记录数非常不同(count()要高得多)。我做错什么了吗 这将带来约1.1亿美元的回报 db.getCollection('ex').count({ 'data.points': {$exists: true}, 'data.points.points': {$exists: false}, }, { 'data.id': 1, 'data.author.id':

我试图通过查询并将结果存储在较小的集合中来过滤数据集合。但是,使用count()找到的记录数与集合中的记录数非常不同(count()要高得多)。我做错什么了吗

这将带来约1.1亿美元的回报

db.getCollection('ex').count({
    'data.points': {$exists: true},
    'data.points.points': {$exists: false},
}, {
    'data.id': 1,
    'data.author.id': 1
})
然后我执行这个

db.getCollection('ex').find({
    'data.points': {$exists: true},
    'data.points.points': {$exists: false},
}, {
    'data.id': 1,
    'data.author.id': 1
})
.forEach(function (doc) {
    db.s_uid_wid.insert(doc)
})
但这只提供了大约500万条记录。它们应该完全相同。发生了什么事

db.getCollection('s_uid_wid').count({})
编辑
  • 之前我在robomongo gui中运行这个程序,它给人的印象是一切都很好。现在我在mongo shell中尝试了这个,我得到了这个
2016-02-04T00:39:21.735+0800错误:getMore:服务器上不存在游标,是否可能重新启动或超时?在src/mongo/shell/query.js:116


以下内容修复了该问题。完成插入大约需要一天时间

db.getCollection('ex').find({
    'data.points': {$exists: true},
    'data.points.points': {$exists: false},
}, {
    'data.id': 1,
    'data.author.id': 1
}).addOption(DBQuery.Option.noTimeout)
.forEach(function (doc) {
    db.s_uid_wid.insert(doc)
})   

count()
没有
投影parameter@AlexBlex你是说第一个命令吗?让它影响计数的结果吗?您可能在.forEach循环期间遇到错误,并且它最多只插入了500万条记录。在不使用forEach的情况下尝试find(),看看返回游标的count()给出了什么。