通过节点更新Mongo文档但没有结果

时间:2016-10-07 17:04:21

标签: node.js mongodb

我一直试图向我的"人员"添加电子邮件(这是一个新领域)。收集,但我不知道为什么我没有从服务器得到任何结果。这是我的代码

for (key in D_emails) {
  console.log(D_emails[key])
  try {
    o_id = new mongo.ObjectID(D_emails[key])

    collection.updateOne({
      _id: o_id
    }, {
      $set: {
        "Email": key
      }
    }, function(err, results) {
      if (err) {
        throw err
      } else if (results.length) {
        console.log(results)
      } else {
        console.log("no results")
      }
    });
  } catch (e) {
    print(e);
  }
}

2 个答案:

答案 0 :(得分:2)

根据router.js的mongo文档,查询的响应(在您的情况下为results)不包含length元素,也不是数组或对象。这将是根据文档的回复:

返回包含以下内容的文档:

  
      
  • 如果操作以写入关注运行,则布尔值确认为true;如果禁用写入关注,则返回false
  •   
  • matchedCount包含匹配文档的数量
  •   
  • modifiedCount包含_id for
  • 的upsertedId修改文档的数量   
  • 上传的文件
  •   

答案 1 :(得分:0)

首先。在使用" err"的概念时,尝试编写代码时不使用try catch块。从每个异步回调返回的对象。您可以在回调中处理错误。 "投掷"该错误还会阻止其他电子邮件更新。但也许这就是你想要的。它现在并不重要。

现在,回到你的问题。让我告诉你result是什么,在这个例子中:

// inserting.
collection.insertOne({_id: "lala", a:10, b:20}, function (err, r) {
    assert.equal(null, err);
    assert.equal(1, r.insertedCount);

    // updating.
    collection.updateOne({_id: "lala"}, {$set: {a: 99}}, {}, function(err, result) {
        assert.equal(null, err);
        console.log(result) // first thing printed.
        console.log(JSON.stringify(result, null, "\t")) // second print.

        // checking whats inside it.
        collection.findOne({_id: "lala"}, {}, function(err, doc) {
            assert.equal(null, err);
            console.log(doc) // third print.

            db.close() // don't close connection if you don't need to.
        })
    })
})

3个打印的东西将会(滚动到最后看看你真正想要的东西):

CommandResult {
  result: { ok: 1, nModified: 1, n: 1 },
  connection: 
   Connection {
     domain: null,
     _events: 
      { close: [Object],
        error: [Object],
        timeout: [Object],
        parseError: [Object],
        connect: [Function] },
     _eventsCount: 5,
     _maxListeners: undefined,
     options: 
      { socketOptions: {},
        auto_reconnect: true,
        host: 'localhost',
        port: 27017,
        cursorFactory: [Object],
        reconnect: true,
        emitError: true,
        size: 5,
        disconnectHandler: [Object],
        bson: BSON {},
        messageHandler: [Function],
        wireProtocolHandler: [Object] },
     id: 1,
     logger: Logger { className: 'Connection' },
     bson: BSON {},
     tag: undefined,
     messageHandler: [Function],
     maxBsonMessageSize: 67108864,
     port: 27017,
     host: 'localhost',
     keepAlive: true,
     keepAliveInitialDelay: 0,
     noDelay: true,
     connectionTimeout: 0,
     socketTimeout: 0,
     destroyed: false,
     domainSocket: false,
     singleBufferSerializtion: true,
     serializationFunction: 'toBinUnified',
     ca: null,
     cert: null,
     key: null,
     passphrase: null,
     ssl: false,
     rejectUnauthorized: false,
     checkServerIdentity: true,
     responseOptions: { promoteLongs: true },
     flushing: false,
     queue: [],
     connection: 
      Socket {
        connecting: false,
        _hadError: false,
        _handle: [Object],
        _parent: null,
        _host: 'localhost',
        _readableState: [Object],
        readable: true,
        domain: null,
        _events: [Object],
        _eventsCount: 8,
        _maxListeners: undefined,
        _writableState: [Object],
        writable: true,
        allowHalfOpen: false,
        destroyed: false,
        _bytesDispatched: 334,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: null,
        _server: null,
        _idleNext: null,
        _idlePrev: null,
        _idleTimeout: -1,
        read: [Function],
        _consuming: true },
     writeStream: null,
     hashedName: '29bafad3b32b11dc7ce934204952515ea5984b3c',
     buffer: null,
     sizeOfMessage: 0,
     bytesRead: 0,
     stubBuffer: null },
  matchedCount: 1,
  modifiedCount: 1,
  upsertedId: null,
  upsertedCount: 0 }
{
    "ok": 1,
    "nModified": 1,
    "n": 1
}
{ _id: 'lala', a: 99, b: 20 }

第一个对象是从" updateOne()"返回的result。 第二个对象是result" toString()"实现,这就是result.result里面的内容(滚动回顶部)。 最后一个对象是查询更新文档后得到的内容。

您可以在nodejs网站的本机mongodb驱动程序中找到更多示例:http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#updateOne 他们充满了榜样。