我一直试图向我的"人员"添加电子邮件(这是一个新领域)。收集,但我不知道为什么我没有从服务器得到任何结果。这是我的代码
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);
}
}
答案 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 他们充满了榜样。