我在名为users
的MongoDB集合中有以下数据:
{
"_id" : ObjectID("5a3903562cdc59fad5fdc098"),
"name" : "Ana",
"hobbies" : [
{
"title" : "kissing",
"with" : "pets"
},
{
"title" : "playing",
"with" : "pets"
},
{
"title" : "sleeping",
"with" : "pets"
}
]
}
{
"_id" : ObjectID("5a3903a32cdc59fad5fdc099"),
"name" : "Bart",
"hobbies" : [
{
"title" : "hitting",
"with" : "pets"
},
{
"title" : "beating",
"with" : "pets"
},
{
"title" : "eating",
"with" : "pets"
}
]
}
我需要使用 legos 等新值替换所有with
键的 pets 值。
MongoDB版本3.6的documentation声明如下:
$ []运算符可用于遍历多个数组和嵌套数组的查询。
由于每个with
密钥都位于两个独立的数组中,因此使用$[]
应该可以完成我需要做的事情。在Mac上,它运行良好,但在Windows机器上,我收到此错误:
cannot use the part (hobbies of hobbies.$[].with) to traverse the element
两台机器都运行MongoDB shell版本3.6.0。 Mac的操作系统是macOS Sierra 10.12.6,对于Windows机器,它是Windows 10。
SO有很多与位置运算符有关的问题以及我具体得到的错误。但是它们都没有解决为什么在相同的集合上执行相同的操作在Windows上失败但在Mac上成功的原因。
我尝试了以下两个命令来实现我需要的结果。两者都可以在Mac上运行,并且在Windows上都失败,并且上面给出的错误相同。
db.users.updateMany({}, {$set: {"hobbies.$[].with": "legos"}});
和
db.users.update({}, {$set: {"hobbies.$[].with": "legos"}}, {multi: true});
您可以看到差异here的屏幕录制。我事先道歉,Windows机器上的录音文本偏小。
非常感谢任何有助于了解如何在Windows上解决此问题的帮助。
答案 0 :(得分:3)
检查您的功能兼容性版本。 默认情况下,它可能是3.4。 Documentation
您需要将功能兼容性版本设置为3.6
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
答案 1 :(得分:0)
我无法告诉,但在Windows上看起来像是你的查询()而不是{}
答案 2 :(得分:0)
Linux也存在同样的问题。
我正在使用Ubuntu 16.04,MongoDB 3.6.1
以下是$ []执行后的输出
var colors = ["gray", "red", "green", "blue", "orange", "yellow", "purple", "pink"];
var rotateOffset = 0;
function setColours()
{
for (var i = 0; i < colors.length; i++) {
var arcIndex = (i + rotateOffset) % colors.length;
document.querySelector("#" + colors[i]).style.strokeDashoffset = (arcIndex ) * -35.3;
}
}
// Set initial colours
setColours();
// Button handlers
document.getElementById('left').addEventListener("click", function() {
rotateOffset += (colors.length - 1);
setColours();
});
document.getElementById('right').addEventListener("click", function() {
rotateOffset++
setColours();
});
P.S:我没有足够的声誉来添加评论,因此在此发布
答案 3 :(得分:-1)
我检查mongodb引用,最小版本是3.6,其中包含$ []。