我有一个非常奇怪的问题:
我的.find()
方法和.count()
方法不返回兼容的对象,例如.find()
根本不返回任何对象,.count()
返回1.
这是我的代码(Coffeescript)
config = require('../config.js')
MongoClient = require('mongodb').MongoClient
MongoClient.connect("mongodb://127.0.0.1:27017/#{config.General.database}",(err,db)->
callback=(err,hands)->
if err then throw err
console.log 'find:'+hands.length
console.log hands
callbackCount=(err,c)-> console.log 'count:'+c
condition={"processed":null}
db.collection('hands').count(condition,callbackCount)
db.collection('hands').find(condition).toArray(callback)
db.collection('hands').find(condition,{raw:true}).toArray(callback)
)
以下是已编译JS的要点:https://gist.github.com/74ab937bf7636d4bf9cf
返回:
count:1
find:0
[]
find:1
[ <Buffer 35 0c 00 00 02 5f 69 64 00 0d 00 00 00 31 32 38 36 37 36 35 33 35 37 30 38 00 04 70 6c 61 79 65 72 73 00 b8 03 00 00 03 30 00 60 00 00 00 08 61 63 74 69 ...> ]
奇怪的是,如果没有任何特殊选项,查找条件将不会返回。但是,如果我设置选项{raw:true},find方法会给我一些结果,这让我觉得原始的数据转换没有正确完成?
我的数据库包含大量的“手”和“手”。 (大约170万),用processed
标志索引。
当我在mongo命令行中运行db.hands.find()
和db.hands.count()
时,我得到了预期的结果(例如手对象和1)。
如果我回滚到nodejs mongo驱动程序的1.4版本,查找和计数似乎一致。
我还发现如果我插入另一个手元素,find
再次正常工作。
我在没有任何特殊选项的情况下运行mongod,而且我在开发机器上。
为什么会出现这种奇怪的行为?
重启mongod并没有改变任何事情。
似乎问题很难重现,我刚刚在测试数据库中插入了200万只手,我无法以这种方式重现这个问题。