MongoClient Native FindAndModify“需要更新或删除”错误

时间:2014-05-28 05:33:10

标签: node.js mongodb mongodb-query

我的node.js客户端如下所示:

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect(mongoendpoint, function(err, db) {
        if(err) throw err;
        var collection = db.collection('test-collection');

        var ws = new WebSocket(websocket_Endpoint);
        ws.on('open', function() {
                log.info('Connected.');
        });

        ws.on('message', function(data, flags) {

                wsevent = JSON.parse(data);

                var args = {
                        'query': {
                                id: '1.2.3.4'
                        },
                        'update': {
                                $set: {
                                        lastseen: "201405231344"
                                },
                                $addToSet: {
                                        record: "event123"
                                }
                        },
                        'new': true,
                        'upsert': true
                };

                collection.findAndModify(args, function(err, doc){
                        log.info(err);
                });
        });
});

当我运行此操作时,我收到以下错误

info:  name=MongoError, ok=0, errmsg=need remove or update

我无法弄清楚原因。我可以使用RoboMongo在上面运行完全相同的args json,并且查询工作正常。

Robomongo查询

db['test-collection'].findAndModify({"query":{"id":"1.2.3.4"},"update":{"$setOnInsert":{"lastseen":"201405231344"},"$addToSet":{"record":"event123"}},"new":true,"upsert":true});

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您的args部分错误,它应该是一个数组,不需要“查询”和“更新”的键值。而“选项”值也需要是一个对象(子文档):

           var args = [
                    { id: '1.2.3.4' },
                    {
                            $set: {
                                    lastseen: "201405231344"
                            },
                            $addToSet: {
                                    record: "event123"
                            }
                    },
                    {
                        'new': true,
                        'upsert': true
                    }
            ];

或者特别是在电话中:

collection.findAndModify(
    { id: '1.2.3.4' },
    { 
        $set: { lastseen: "201405231344" },
        $addToSet: { record: "event123" }
    }, 
    {
        'new': true,
        'upsert': false
    },
    function(err, doc){

示例也包含在manual page