Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在MongoDB中使用updateOne时,如何访问upsertedId_Arrays_Mongodb_Save_Insert Update_Upsert - Fatal编程技术网

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,一些其他变量在这里…}]
。除了最新/更新的文档之外