mongodb查询更新选择嵌套字段
Posted
技术标签:
【中文标题】mongodb查询更新选择嵌套字段【英文标题】:mongodb query update select nested fields 【发布时间】:2019-09-25 20:29:42 【问题描述】:这是我在 mongo 中的文档:
"calendar":
"_id": "5cd26a886458720f7a66a3b8",
"hotel": "5cd02fe495be1a4f48150447",
"calendar": [
"_id": "5cd26a886458720f7a66a413",
"date": "1970-01-01T00:00:00.001Z",
"rooms": [
"_id": "5cd26a886458720f7a66a415",
"room": "5cd17d82ca56fe43e24ae5d3",
"price": "",
"remaining": 0,
"reserved": 0
,
"_id": "5cd26a886458720f7a66a414",
"room": "5cd17db6ca56fe43e24ae5d4",
"price": "",
"remaining": 0,
"reserved": 0
]
,
我需要更新内部房间数组中的对象。我尝试了一个选择匹配元素的查询,没有语法错误,但出现错误:
"errmsg" : "字段 'calendar.0.rooms.0.price' 必须是一个数组,但是 在文档 _id: 中属于字符串类型: ObjectId('5cd26a886458720f7a66a3b8')",
这是我的查询:
db.calendars.updateOne(_id:ObjectId("5cd26a886458720f7a66a3b8"),
"calendar":"$elemMatch":"_id":ObjectId("5cd26a886458720f7a66a413"),"rooms._id":
ObjectId("5cd26a886458720f7a66a415"),
"$push":"calendar.$[outer].rooms.$[inner].price":"100000", "arrayFilters":["outer._id":ObjectId("5cd26a886458720f7a66a413"),"inner._id":ObjectId("5cd26a886458720f7a66a415")])
这是我在 *** 中找到的一些参考资料,但没有帮助: Updating a Nested Array with MongoDB
【问题讨论】:
如果你得到了答案,那么要么将其标记为重复,要么自己回答。 不,我没有得到答案。我找到了一些查询,但它不起作用。 【参考方案1】:您可以使用以下查询
db.getCollection("test").updateOne(
"_id": ObjectId("5cd26a886458720f7a66a3b8"),
"calendar.calendar":
"$elemMatch":
"_id": ObjectId("5cd26a886458720f7a66a413"),
"rooms._id": ObjectId("5cd26a886458720f7a66a415")
,
"$set": "calendar.calendar.$[outer].rooms.$[inner].price": "100000" ,
"arrayFilters": [
"outer._id": ObjectId("5cd26a886458720f7a66a413") ,
"inner._id": ObjectId("5cd26a886458720f7a66a415")
]
)
之后我会用一些解释来更新我的答案
【讨论】:
以上是关于mongodb查询更新选择嵌套字段的主要内容,如果未能解决你的问题,请参考以下文章