使用 mongoose 更新文档中的嵌套 object
Updating a nested object in a document using mongoose
我一直在尝试使用 findOneAndUpdate()
方法更新 Mongodb 文档中的特定 object,但没有成功。这是我收藏的样子
{
_id: new ObjectId("61da0ab855483312e8f4483b"),
products: [
{
createdAt: 2022-01-08T22:05:44.635Z,
_id: new ObjectId("61da0ab855483312e8f4483c"),
productCode: 'otf',
productName: 'facebookmeta',
claims: [Array],
permissions: []
},
{
createdAt: 2022-01-08T22:05:44.635Z,
_id: new ObjectId("61da0ab855483312e8f4483f"),
productCode: '4pf',
productName: 'twitteroauth',
claims: [Array],
permissions: [Array]
}
],
__v: 0
}
当我尝试这样的事情时。我正在尝试根据其产品代码找到一个单一的 object 并更新 object
ProductModel.findOneAndUpdate({productCode: userData.productCode}, dataToBeUpdated, {new: true})
它returns一个
Performing an update on the path '_id' would modify the immutable field '_id
我怀疑 MongoDB 正在对 collection 和 returns 匹配文档的结果应用查询条件,所以它可能返回两个 objects 这可能是我遇到错误的原因,但我可能是错的。
我如何有效地将其指向右侧 object 并执行更新
MongoDB支持使用位置运算符($)对子文档进行单级深度更新。
db.collection_name.update({
_id: ObjectId("61da0ab855483312e8f4483b"),
"products.productCode": "4pf"
},
{
"$set": {
"products.$.productName": "twitteroauth name updated"
}
})
在上面的更新子句中,$会在运行时被子文档的匹配索引替换。
例如 $ 将在运行时被值 1 替换,因为 "products.productCode": "4pf" 条件
请注意以下几点:
- 您必须将数组字段作为查询文档的一部分。
- 位置运算符不能用于嵌套数组内部的更新。
其他参考资料:https://docs.mongodb.com/manual/reference/operator/update/positional/
我一直在尝试使用 findOneAndUpdate()
方法更新 Mongodb 文档中的特定 object,但没有成功。这是我收藏的样子
{
_id: new ObjectId("61da0ab855483312e8f4483b"),
products: [
{
createdAt: 2022-01-08T22:05:44.635Z,
_id: new ObjectId("61da0ab855483312e8f4483c"),
productCode: 'otf',
productName: 'facebookmeta',
claims: [Array],
permissions: []
},
{
createdAt: 2022-01-08T22:05:44.635Z,
_id: new ObjectId("61da0ab855483312e8f4483f"),
productCode: '4pf',
productName: 'twitteroauth',
claims: [Array],
permissions: [Array]
}
],
__v: 0
}
当我尝试这样的事情时。我正在尝试根据其产品代码找到一个单一的 object 并更新 object
ProductModel.findOneAndUpdate({productCode: userData.productCode}, dataToBeUpdated, {new: true})
它returns一个
Performing an update on the path '_id' would modify the immutable field '_id
我怀疑 MongoDB 正在对 collection 和 returns 匹配文档的结果应用查询条件,所以它可能返回两个 objects 这可能是我遇到错误的原因,但我可能是错的。
我如何有效地将其指向右侧 object 并执行更新
MongoDB支持使用位置运算符($)对子文档进行单级深度更新。
db.collection_name.update({
_id: ObjectId("61da0ab855483312e8f4483b"),
"products.productCode": "4pf"
},
{
"$set": {
"products.$.productName": "twitteroauth name updated"
}
})
在上面的更新子句中,$会在运行时被子文档的匹配索引替换。
例如 $ 将在运行时被值 1 替换,因为 "products.productCode": "4pf" 条件
请注意以下几点:
- 您必须将数组字段作为查询文档的一部分。
- 位置运算符不能用于嵌套数组内部的更新。
其他参考资料:https://docs.mongodb.com/manual/reference/operator/update/positional/