首页 > 解决方案 > 使用 Node JS 和 Mongoose 访问插入文档的结果

问题描述

我有这个代码:

var newresult = ""

oneDoc = { "adClientID": *randomID*, "adClientName": "abc", "adClientNameUPC": "ABC" }
newdoc.push(oneDoc)

await AdClient.create(newdoc, (err, result) => {
    console.log(result)
    console.log(result.adClientID)
    newresult = result
})
console.log(newresult)

现在我需要访问已添加到集合中的值。

使用此代码,打印“结果”的行可以正常工作并打印以下内容:

{
adClientID: 'da7d3d78-b873-4cdd-ae85-3726d3cbd8a7',
adClientName: 'abc',
adClientNameUPC: 'ABC',
_id: '5f6e4582a790764cab84f586',
__v: 0
}

但是打印的行result.adClientID返回 undefined 并且打印的行newresult返回一个空字符串。

我错过了什么阻止我访问添加的特定数据?

标签: javascriptnode.jsmongodbmongoose

解决方案


我可能是错的,但我认为你await实际上并没有在等待任何事情。Mongoose 说这个函数可以返回一个 Promise(可以等待)或未定义。

Returns undefined if used with callback or a Promise otherwise.

无论如何,我建议不要混合异步编程风格。

我不太熟悉,.create因为我们通常使用 upserts,但我会这样写:

const updated = await AdModel.findOneAndUpdate(
  { adClientID: oneDoc.adClientID },
  { $set: { ...oneDoc } },
  { new: true, upsert: true, ...options },
}).lean();

console.log(updated);

推荐阅读