Я пытаюсь отфильтровать сбор данных, сделав запрос и сохранив результаты в меньшей коллекции. Однако количество записей, которые были найдены с использованием count() и числа в коллекции, сильно отличается (count() намного выше). Я делаю что-то неправильно?Mongodb find-> insert and count имеет отличные результаты
Это возвращает около 110 миллионов.
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)
})
Но это дает всего 5 миллионов записей. Они должны быть точно такими же. Что происходит?
db.getCollection('s_uid_wid').count({})
Редактировать
- Раньше я работала в этом robomongo гуй и создавалось впечатление, что все было хорошо. Теперь я попытался это в Монго оболочки, и я получил эту
2016-02-04T00:39:21.735+0800 Error: getMore: cursor didn't exist on server, possible restart or timeout? at src/mongo/shell/query.js:116
'COUNT()' не имеет 'projection' параметр –
@AlexBlex, вы говорите о первой команде? Будет ли это влиять на результат подсчета? –
Существует вероятность того, что вы столкнулись с ошибкой во время цикла .forEach, и в нее было вставлено до 5 миллионов записей. Попробуйте find() без forEach и посмотрите, что дает вам count() возвращаемого курсора. –