Arrays 在MongoDB中使用updateOne时,如何访问upsertedId
我有新的数据要插入到我的Arrays 在MongoDB中使用updateOne时,如何访问upsertedId,arrays,mongodb,save,insert-update,upsert,Arrays,Mongodb,Save,Insert Update,Upsert,我有新的数据要插入到我的博客的数组中(我的收藏如下所示):- 现在,我可以在我的博客阵列中添加新的文章,代码如下所示:- { _id: 0, // other vars here..., blog: [ { _id: 0, title: 'Article 1' }, // add new article here ] } const query = {} const
博客的数组中(我的收藏如下所示):-
现在,我可以在我的博客阵列中添加新的文章
,代码如下所示:-
{
_id: 0,
// other vars here...,
blog: [
{
_id: 0,
title: 'Article 1'
},
// add new article here
]
}
const query = {}
const update = { $push: { blog: inputData } }
const options = { upsert: true }
All.updateOne(query, update, options)
.then(result => {
res.redirect(`/article/${result.upsertedId}`) // read MongoDB documentation that I can get the newly inserted data ID by using result.upsertedId
})
.catch(err => res.redirect(`/`)
但我似乎无法将新插入数据的ID
获取到我的集合中。使用result.upsertedId
返回我未定义的。根据上面的代码,我需要ID
,以便将用户重定向到该ID
的新文章页面
这里的文档告诉我们它将返回upsertedId
这是console.log时得到的结果(其中没有upsertedId
)
打印您的结果以确认收到ID,您的结果可能与以下内容类似:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
您可以尝试使用并从该结果中检索upsertedId打印您的结果以确认收到了一个ID,您的结果可能与此类似:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
您可以尝试使用并从该结果中检索upsertedId您需要在选项中传递new:true以获取更新文档的id
i、 e
您需要在选项中传递new:true以获取更新文档的id
i、 e
它不适用于嵌套文档
您正在执行的是更新操作
医生说
由upsert操作插入的文档的_id值。仅当启用了upsert选项且更新查询与任何文档都不匹配时,此值才存在
您的查询将导致更新操作。这就是为什么要修改n
一个选项是,您可以将findOneAndUpdate
与选项returnNewDocument
选项true一起使用。它不适用于嵌套文档
您正在执行的是更新操作
医生说
由upsert操作插入的文档的_id值。仅当启用了upsert选项且更新查询与任何文档都不匹配时,此值才存在
您的查询将导致更新操作。这就是为什么要修改n
一个选项是,您可以将findOneAndUpdate
与选项returnNewDocument
选项true一起使用。我在const options={upsert:true,new:true}
中添加了new:true
。但一切都没有改变。我的result
看起来像这样(如上面的问题所示),您使用的是哪个mongo连接器/npm?我在mongoose包版本5.9.20OK中使用Node JS,实际上结果是一个mongoose对象,所以为了获得简单的JSON,您可以使用user result.toObject()或使用lean()相反,我在const options={upsert:true,new:true}
中添加了new:true
。但一切都没有改变。我的result
看起来像这样(如上面的问题所示),您使用的是哪个mongo连接器/npm?我在mongoose包版本5.9.20OK中使用Node JS,实际上结果是一个mongoose对象,所以为了获得简单的JSON,您可以使用user result.toObject()或使用lean()取而代之的是,这个函数将返回整个收集数据。但不是新插入的数据。应该是这样吗?不,你是怎么尝试的?它将只返回更新的文档?我将我的const options={upsert:true}
更改为const options={returnNewDocument:true}
。和console.log(result)
,它提供了整个集合,但没有提供更新/新创建的数据。是因为我嵌套了文档吗?这就是为什么它会返回整个文档,而不仅仅是blog数组。你能粘贴查询结果吗?它基本上提供了集合中的所有内容(如我在问题中所述的集合示例),\u id:0,一些其他变量…,blog:[{{u id:0,一些其他变量在这里…},{u id:1,一些其他变量在这里…},{u id:2,这里有一些其他变量…}]
。除了新的/更新的文档之外,所有这些都返回整个收集数据。但不是新插入的数据。假设是这样的吗?不,您是如何尝试的?它将只返回更新的文档?我将const options={upsert:true}
更改为const options={returnNewDocument:true}
和console.log(结果)
,它给了我整个集合,但没有给我更新/新创建的数据。这是因为我嵌套了文档吗?这就是为什么它会返回整个文档而不仅仅是博客数组。你能粘贴查询结果吗?它基本上给了我集合中的所有内容(就像我在问题中提到的我的收藏的例子),\u id:0,一些其他变量…,blog:[{{u id:0,一些其他变量在这里…},{{u id:1,一些其他变量在这里…},{u id:2,一些其他变量在这里…}]
。除了最新/更新的文档之外