ho questo documento nel motore di Mongo:tirare da una lista in un dict utilizzando mongoengine
class Mydoc(db.Document):
x = db.DictField()
item_number = IntField()
E ho questo dati nel documento
{
"_id" : ObjectId("55e360cce725070909af4953"),
"x" : {
"mongo" : [
{
"list" : "lista"
},
{
"list" : "listb"
}
],
"hello" : "world"
},
"item_number" : 1
}
Ok se voglio spingere per mongo elenco utilizzando mongoengine, faccio questo:
Mydoc.objects(item_number=1).update_one(push__x__mongo={"list" : "listc"})
che funziona abbastanza bene, se una query al database di nuovo ottengo questo
{
"_id" : ObjectId("55e360cce725070909af4953"),
"x" : {
"mongo" : [
{
"list" : "lista"
},
{
"list" : "listb"
},
{
"list" : "listc"
}
],
"hello" : "world"
},
"item_number" : 1
}
ma quando provo a tirare da stessa lista con trazione a motore di Mongo:
Mydoc.objects(item_number=1).update_one(pull__x__mongo={'list': 'lista'})
ottengo questo errore:
mongoengine.errors.OperationError: Update failed (Cannot apply $pull to a non-array value)
comparising le frasi:
Mydoc.objects(item_number=1).update_one(push__x__mongo={"list" : "listc"}) # Works
Mydoc.objects(item_number=1).update_one(pull__x__mongo={"list" : "listc"}) # Error
Come posso tirare da questa lista?
Apprezzo tutto l'aiuto
Grazie, __raw__ funziona piuttosto bene, anche meglio usare la sintassi di mongodb. – oskararenas