MongoDB:$和操作员未使用Node.JS驱动程序进行批量更新
我正在尝试从Node.js使用MongoDB 3.0.4中的。奇怪的是,如果使用了MongoDB:$和操作员未使用Node.JS驱动程序进行批量更新,node.js,mongodb,coffeescript,Node.js,Mongodb,Coffeescript,我正在尝试从Node.js使用MongoDB 3.0.4中的。奇怪的是,如果使用了$和或$ne等运算符,我会得到下面的错误。不过,简单的查询可以工作 WriteError({"code":9,"index":0,"errmsg":"Unknown modifier: $and","op":{"q":{"$and":[{"id":49689},{"status":{"$ne":4}}]},"u":{"$and":[{"id":49689},{"status":{"$ne":4}}]},"multi
$和
或$ne
等运算符,我会得到下面的错误。不过,简单的查询可以工作
WriteError({"code":9,"index":0,"errmsg":"Unknown modifier: $and","op":{"q":{"$and":[{"id":49689},{"status":{"$ne":4}}]},"u":{"$and":[{"id":49689},{"status":{"$ne":4}}]},"multi":true,"upsert":false}})
下面是CoffeeScript中的一些测试代码:
bulk = db.mongo.collection('route-segments').initializeUnorderedBulkOp()
filter = $and: [
{ id: 49689 }
{ status: $ne: 4 }
]
# filter = id: segStatus.id # <-- this works
bulk.find(filter).updateOne(filter, $set: status: 4)
bulk.execute (err, result) ->
console.log "err = #{err}"
MongoDB版本:3.0.4MongoDB Node.js驱动程序:2.0.35在updateOne方法中不应使用
过滤器
哦,谢谢!这真是一个愚蠢(而且昂贵)的打字错误,让我困惑了好一阵子。不客气,我知道那个故事!通常,最好的解决方案是重写部分,这是一个从头开始的问题!
> bulk=c.initializeUnorderedBulkOp()
{ "nInsertOps" : 0, "nUpdateOps" : 0, "nRemoveOps" : 0, "nBatches" : 0 }
> bulk.find({ $and: [{id: 49689}, {status: {$ne: 4}}]}).updateOne( {$set: {status: 4}})
> bulk.execute()
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 0,
"nUpserted" : 0,
"nMatched" : 1,
"nModified" : 1,
"nRemoved" : 0,
"upserted" : [ ]
})