java mongodb 数组操作符,MongoDB使用多个数组选择器更新$ update运算符

我正在尝试使用 $ update运算符更新数组中的元素 . 该文档包含2个数组字段,我必须查询两个以选择正确的文档 .

该集合名为 locations ,文档如下所示:

{

"_id" : "XqEQYpitGFG3nnf3C",

"wallpapers" : [

{

"_metadata" : {

"master" : "vwb22W4MhkqtvAp89",

"isMaster" : false

},

"role" : "master",

"_id" : ""

},

{

"_metadata" : {

"master" : "vwb22W4MhkqtvAp89",

"isMaster" : false

},

"role" : "clone",

"_id" : ""

},

{

"_metadata" : {

"master" : "vwb22W4MhkqtvAp89",

"isMaster" : false

},

"role" : "pod",

"_id" : ""

}

],

"ancestors" : [

"vwb22W4MhkqtvAp89",

"tqzqfum9uMs47xcHW",

"b4d83aqTkq6TGvXts",

"XqEQYpitGFG3nnf3C"

]

}

更新运算符如下所示:

db.getCollection('locations').update(

{

"ancestors": "b4d83aqTkq6TGvXts",

"wallpapers": {

"$elemMatch": {

"role": "clone",

"_metadata.master": "vwb22W4MhkqtvAp89"

}

}

},

{

"$set": {

"wallpapers.$": {

"_id": "D33WNZh7Bg4itPdhk",

"_metadata": {

"master": "b4d83aqTkq6TGvXts",

"isMaster": false

},

"role": "clone"

}

}

}

)

所以我想替换 wallpapers 数组中的元素 . 但是,我得到的结果是:

{

"_id" : "XqEQYpitGFG3nnf3C",

"wallpapers" : [

{

"_metadata" : {

"master" : "vwb22W4MhkqtvAp89",

"isMaster" : false

},

"role" : "master",

"_id" : ""

},

{

"_metadata" : {

"master" : "vwb22W4MhkqtvAp89",

"isMaster" : false

},

"role" : "clone",

"_id" : ""

},

{

"_id" : "D33WNZh7Bg4itPdhk",

"_metadata" : {

"master" : "b4d83aqTkq6TGvXts",

"isMaster" : false

},

"role" : "clone"

}

],

"ancestors" : [

"vwb22W4MhkqtvAp89",

"tqzqfum9uMs47xcHW",

"b4d83aqTkq6TGvXts",

"XqEQYpitGFG3nnf3C"

]

}

所以它取代了错误的元素 . 似乎 .$ 引用的位置是 ancestors 字段的选择器中的位置 .

这是一个错误还是一个限制?有没有解决方案(例如 .$1 和 .$2 ?

我正在使用MongoDB 3.2.6 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值