我的问题与此相关
findAndModify Error in mongodb - nodejs - error code 17287
但解决方案没有奏效(我尝试指定顺序,但我得到同样的错误)我认为这可能是我使用example
而不是_id
的索引。 (_id
是此集合中的一个字段,我不想在这种情况下按_id
进行搜索)根本不确定...
错误:
{ [MongoError: exception: nextSafe(): { $err: "Can't canonicalize query: BadValue bad sort specification", code: 17287 }]
name: 'MongoError',
message: 'exception: nextSafe(): { $err: "Can\'t canonicalize query: BadValue bad sort specification", code: 17287 }',
errmsg: 'exception: nextSafe(): { $err: "Can\'t canonicalize query: BadValue bad sort specification", code: 17287 }',
code: 13106,
ok: 0 }
这是我的代码,它应该找到并修改(并使用new:true返回)字段example
等于减1的文档的第一个实例。
db.collection('documents').findAndModify({example:-1},{$set:{example:0}},{new:true},function(err,result){
console.dir(err||result);
});
但所有这一切都是错误的,就像它恨我的脸一样!
这是一份文件:
{'_id':0,'example':-1}
我的id字段是自定义数字我确保_id始终是唯一的(为了我的目的,我无法将_id更改为标准的mongodb方式。)
答案 0 :(得分:2)
当节点文档突然结束然后你猜测代码结构应该是什么/可能只是一个标准结构但是不是这样的时候让它工作是很痛苦的!由于开发人员未记录的方法,我浪费了一天。
这是工作代码
db.collection('documents').findAndModify({'example':{$eq:-1}},[['example',1]],{$set:{'example':-1}},{'new':true},function(err,result){
console.dir(err||result);
});
我不确定我是否真的喜欢编写像以太这样的代码。我可能会为此寻找另一个节点模块,因为上面的查询看起来很恶心!
如果我能找到看起来像这样简单的东西,那会很有意思:
db.collection('documents').findModifyReturn('find:example==-1;order:asc;set:example=0;',function(e,r){});
答案 1 :(得分:0)
尝试使用$eq
运算符。
db.collection('documents').findAndModify({example: {$eq: -1}}, {'example', 'ascending'},{$set:{example:0}},{new:true},function(err,result){
console.dir(err||result);
});