del PO non corrispondono. Vuole effettivamente inserire un campo in un array all'interno del documento, il che significa che
db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}});
funziona bene.
Tuttavia, se si desidera aggiungere un valore o un documento secondario a un dizionario, si utilizzerà il comando $set
. Prendete questo documento come il nostro esempio:
{
"_id": {
"$oid": "538420b2862a656e9e99fc93"
},
"name": "Farmer John",
"items": {
"peaches": 5,
"bananas": 10
}
}
Diciamo che si desidera aggiungere "apples": 2
agli elementi. Il comando sarà
db.collection.update({"name": "Farmer John"},
{"$set": {"items.apples": 2}});
Il vostro documento sarebbe quindi simile:
{
"_id": {
"$oid": "538420b2862a656e9e99fc93"
},
"name": "Farmer John",
"items": {
"peaches": 5,
"bananas": 10,
"apples: 2
}
}
Si noti che questo funziona con l'inserimento di documento secondario e, in modo siamo in grado di modificare l'esempio originale:
{
"_id": {
"$oid": "538420b2862a656e9e99fc93"
},
"name": "Farmer John",
"items": {
"peaches": {
"yellow": 5,
"white": 3
}
}
}
Inseriamo 4 mele Granny Smith e 8 mele Fuji.
db.collection.update({"name": "Farmer John"},
{"$set": {"items.apples": {"fuji": 8, "granny smith": 4}}});
nostro documento sarebbe ora:
{
"_id": {
"$oid": "538420b2862a656e9e99fc93"
},
"name": "Farmer John",
"items": {
"peaches": {
"yellow": 5,
"white": 3
},
"apples": {
"fuji": 8,
"granny smith": 4
}
}
}
Un ultimo commento: notare che se il documento secondario o il campo esiste già, allora sarà sovrascritto dal comando $set
.
Ho curato la questione per renderlo un "vero problema".Se questo non soddisfa ancora i tuoi standard, per favore dimmi qual è il problema. –
Per aggiungere un elemento a un array, penso che quello che vuoi sia $ push o $ addToSet: http://www.mongodb.org/display/DOCS/Updating – matulef