我似乎无法从命令行中删除.remove()。如果我进入mongo shell,我的查询工作正常,但不是直接来自bash。
$ mongo mydatabase --eval 'db.mytable.remove({expires: {$lt: Math.round(new Date().getTime() / 1000)}})'
MongoDB shell version: 2.0.6
connecting to: mydatabase
当通过mongo shell手动运行时,此命令需要数小时才能对我们的所有数据运行。它会像上面一样立即从bash shell中返回。
我知道有数据,可以使用类似--eval
:
$ mongo mydatabase --eval 'printjson(db.mytable.findOne({expires: {$lt: Math.round(new Date().getTime() / 1000)}}))'
MongoDB shell version: 2.0.6
connecting to: mydatabase
{
"_id" : "39e493ccef9d58bf75d856f55fb269f6",
"value" : "mydata",
"expires" : NumberLong(1371486135)
}
为什么db.mytable.remove()
失败而没有错误的任何想法?
答案 0 :(得分:1)
我现在尝试使用MongoDB shell版本:2.2.2,它运行正常:
mongo test --eval 'db.things.remove({expires: {$lt: Math.round(new Date().getTime() / 1000)}})'
尝试将MongoDB更新为较新版本(如果尚未更新),再加上I heard mongoDB版本使用V8 Javascript引擎可能很有用
答案 1 :(得分:0)
在shell中,remove
可能没有使用getLastError,因此是异步的。如果您触发该命令,则可以检查db.currentOp()
以查看是否有任何命令正在运行。
您的查询也可能在shell中被解释为不匹配任何要删除的记录。确保find
使用相同的查询返回数据。
也可能2.0.6的shell默认使用第二个justOne
参数,使其找到并删除第一个匹配的记录,此时它将返回。您可以尝试传递显式的第二个参数false
以强制它进入多记录模式。我没有要测试的2.0.6 shell,但是要检查它。