Ich habe die folgenden Daten in einer MongoDB Sammlung users
genannt:
{
"_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"
}
]
}
ich die Haustiere Wert aller with
Schlüssel mit einem neuen Wert wie legos ersetzen müssen.
documentation der MongoDB für Version 3.6 besagt Folgendes:
The $[] operator can be used for queries which traverse more than one array and nested arrays.
Da jeder der with
Tasten lebt innerhalb von zwei separaten Arrays $[]
verwenden, sollten erreichen, was ich tun muss. Und auf einem Mac, es funktioniert perfekt, aber auf einem Windows-Rechner, bekomme ich diesen Fehler:
cannot use the part (hobbies of hobbies.$[].with) to traverse the element
Beide Maschinen laufen MongoDB Shell-Version 3.6.0. Das Betriebssystem für den Mac ist macOS Sierra 10.12.6 und für den Windows-Rechner ist es Windows 10.
SO hat viele Fragen bezüglich des Positionsoperators und des Fehlers, den ich gerade bekomme. Aber keiner von ihnen adressiert, warum identische Operationen, die auf identischen Sammlungen ausgeführt werden, unter Windows fehlschlagen, aber auf Mac erfolgreich sind.
Ich habe die folgenden zwei Befehle versucht, um das Ergebnis zu erreichen, das ich brauche. Beide funktionieren auf dem Mac und beide scheitern bei Windows mit dem gleichen Fehler wie oben beschrieben.
db.users.updateMany({}, {$set: {"hobbies.$[].with": "legos"}});
und
db.users.update({}, {$set: {"hobbies.$[].with": "legos"}}, {multi: true});
Sie können Bildschirmaufzeichnungen der Differenz here sehen. Ich entschuldige mich im Voraus, dass der Text in der Aufnahme auf der Windows-Maschine auf der kleineren Seite ist.
Jede Hilfe zu verstehen, wie dies unter Windows zu lösen ist sehr willkommen.
Können Sie db.version() auf beiden Betriebssystemen ausführen? Nur um die Serverversion zu bestätigen, sind sie auch gleich. – Veeram
@Veuram, 'db.version()' gibt ** 3.6.0 ** auf beiden Rechnern zurück. –
Bitte bestätigen Sie, dass es sich um dieselbe Datenbank handelt, mit der Sie sich von verschiedenen Systemen aus verbinden. Der Fehler besagt, dass es mindestens ein Dokument ohne "Hobbys" oder mit "Hobbys" gibt, das kein Array ist. Versuchen Sie 'db.users.updateMany ({hobbies: {$ type:" array "}}, {$ set: {" hobbies. $ []. Mit ":" legos "}});' –