Domanda

Ho creato un array nel mio documento Mongo, quindi sembra un po 'come segue:

{ "_id" : ObjectId("4f59e19d0b7aab2903000004"), 
  "details" : { x:1, y:2 }
}
.

Sto cercando di spingere un nuovo valore per l'array, fare:

db.users.update({"_id" : ObjectId("4f59e19d0b7aab2903000004")},{$push: {"details": {"z":3}}});
.

Comunque ottengo l'errore:

Cannot apply $push/$pushAll modifier to non-array
.

Sembra che l'unico modo in cui sono in grado di aggiungere le informazioni all'array, è usare la notazione DOT per aggiungerla, ad esempio

db.users.update({"_id" : ObjectId("4f59e19d0b7aab2903000004")},{"details.z": 3});
.

che sembra funzionare, ma quando ho una serie di circa 30 valori, sembra un po 'noioso.

Solo per chiarezza, sto usando il framework PHP al litio, non solo inserendoli manualmente, quindi potrei andare in giro attraverso un array per aprire i dettagli ".Per ogni chiave, ma non penso che dovrebbe essere necessario.C'è qualcosa che mi manca sul perché non spingerà valori nell'array?

(il mio codice di litio era il seguente :)

User::update(array('$push'=>array('details'=>array('z'=>3))), array('_id'=>$id))
.

Grazie,

Dan

È stato utile?

Soluzione

"Dettagli" è un documento incorporato, non un array.Se fosse un array sembrerebbe questo (nota il [] che indica un array):

{ "_id" : ObjectId("4f59f0531ae8f3b5f92246fe"), 
       "details" : [ { "x" : 1 }, { "y" : 2 } ] }
.

Se fai una spinta $:

db.users.update({"_id" : ObjectId("4f59f0531ae8f3b5f92246fe")}, 
                {$push : {"details": {"z":3}}})
.

Ottieni il risultato atteso:

db.users.find({"_id" : ObjectId("4f59f0531ae8f3b5f92246fe")})

{ "_id" : ObjectId("4f59f0531ae8f3b5f92246fe"), 
  "details" : [ { "x" : 1 }, { "y" : 2 }, { "z" : 3 } ] }
.

Fondamentalmente si sta tentando di spingere a un documento, non un array.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top