nodejs mongodb找到修改并返回new。无法规范化查询

时间:2015-07-08 13:52:31

标签: node.js mongodb

我的问题与此相关

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方式。)

2 个答案:

答案 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);
    });