nodejs中的monk有时会在findAndModify上返回null

时间:2015-10-21 17:15:36

标签: node.js mongodb express monk

我有一些奇怪的错误,我不知道如何对待或如何管理。

问题在于,有时当我尝试使用函数findAndModify更新字段时,它会返回null。

我试图调试,看起来两个请求是相同的,只是不同的结果。

//THIS NOT

{ database: 'testdb',
  collection: 'mytable',
  query: { _id: 5612454f228bd5b7428b456a },
  update: { '$inc': { int_lastid: 1 } },
  options: 
   { new: true,
     fields: {},
     safe: true,
     connection: 
      EventEmitter {
        domain: null,
        _events: [Object],
        _eventsCount: 6,
        _maxListeners: undefined,
        socketOptions: [Object],
        id: 0,
        connected: true,
        domainSocket: false,
        minWireVersion: 0,
        maxWireVersion: 3,
        maxBsonSize: 16777216,
        maxMessageSizeBytes: 48000000,
        maxNumberOfDocsInBatch: 2000,
        buffer: null,
        sizeOfMessage: 0,
        bytesRead: 0,
        stubBuffer: null,
        eventHandlers: [Object],
        maxBsonSettings: [Object],
        socketTimeoutMS: [Getter/Setter],
        logger: [Object],
        connection: [Object],
        writeSteam: [Object],
        maxWriteBatchSize: 1000,
        serverCapabilities: [Object] },
     serializeFunctions: false,
     checkKeys: false } }



//THIS OK
{ database: 'testdb',
  collection: 'mytable',
  query: { _id: 5612454f228bd5b7428b456a },
  update: { '$inc': { int_lastid: 1 } },
  options: 
   { new: true,
     fields: {},
     safe: true,
     connection: 
      EventEmitter {
        domain: null,
        _events: [Object],
        _eventsCount: 6,
        _maxListeners: undefined,
        socketOptions: [Object],
        id: 0,
        connected: true,
        domainSocket: false,
        minWireVersion: 0,
        maxWireVersion: 3,
        maxBsonSize: 16777216,
        maxMessageSizeBytes: 48000000,
        maxNumberOfDocsInBatch: 2000,
        buffer: null,
        sizeOfMessage: 0,
        bytesRead: 0,
        stubBuffer: null,
        eventHandlers: [Object],
        maxBsonSettings: [Object],
        socketTimeoutMS: [Getter/Setter],
        logger: [Object],
        connection: [Object],
        writeSteam: [Object],
        maxWriteBatchSize: 1000,
        serverCapabilities: [Object] },
     serializeFunctions: false,
     checkKeys: false } }

请求太多会影响结果吗?

我的代码是下一个

        app.post('/findAndModify', function(req,res){
        res.append('Content-Type','application/json');
        if(req.body == undefined){
            res.status(400);
            res.json({"status":400,"message":"Bad request."});
            res.end();
            return;
        }
        if(req.body.database == undefined || req.body.collection == undefined || req.body.query == undefined, req.body.update == undefined){
            res.status(400);
            res.json({"status":400,"message":"Bad request."});
            console.log(req.body);
            res.end();
            return;
        }
        _database = req.body.database;
        _collection = req.body.collection;
        _query = req.body.query;
        _update = req.body.update;
        _options = {};
        if(req.body.options != undefined)
            _options = req.body.options;
        //console.log(_options);
        db = req.mongo.getConnection(_database);
        collection.findAndModify(
            {
                "query":_query,
                "update": _update,

            },_options,function(err,doc){
                if(err)
                { 
                    res.status(500);
                    res.json({"status":500, "message":err});
                    res.end();
                }
                else{
                    res.status(200);
                    if(doc == null){
                        console.log("//THIS NOT");
                        console.log(util.inspect(req.body));
                    }
                    else{
                        console.log("//THIS OK");
                        console.log(util.inspect(req.body));
                    }
                    res.json(doc);
                    res.end();
                }
            }
          );

    });

1 个答案:

答案 0 :(得分:0)

选项对象存在差异,第二个请求无效。我的假设是它忽略了该选项并将其设置为默认值(false)。您可以阅读有关此here的更多信息。

options: 
   { new: true}
     fields: {},
     ...
   }

您是否有错误消息或问题是这种奇怪的行为?