Bir mongodb belgesindeki bir dizinin içine yerleştirilmiş bir dizinin içeriğine erişirken bir sorun yaşıyorum. Ben içinde yuvalanmış "özellikleri" dizideki bir elemanın özelliklerini değiştirmek için denediğimde derdeMongoDB: dizi içinde bir diziyi güncelleştiriliyor
db.orgs.update({_id: org_id, "groups._id": group_id} , {$set: {"groups.$.name": "new_name"}});
olduğunu ... aşağıdaki gibi bir sorgu ile ilk dizi "grupları" erişen sorunumuz yok "grup" dizisi. İşte
bir örnek belge
{
"_id" : "v5y8nggzpja5Pa7YS",
"name" : "Example",
"display_name" : "EX1",
"groups" : [
{
"_id" : "s86CbNBdqJnQ5NWaB",
"name" : "Group1",
"display_name" : "G1",
"features" : [
{
_id : "bNQ5Bs8BWqJn6CdNa"
type : "blog",
name : "[blog name]"
owner_id : "ga5YgvP5yza7pj8nS"
},
]
},
]
},
benziyor Ve bu kullanmaya çalıştı sorgu budur.
db.orgs.update({_id: "v5y8nggzpja5Pa7YS", "groups._id": "qBX3KDrtMeJGvZWXZ", "groups.features._id":"bNQ5Bs8BWqJn6CdNa" }, {$set: {"groups.$.features.$.name":"New Blog Name"}});
Bir hata iletisiyle döndürür:
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 2,
"errmsg" : "Too many positional (i.e. '$') elements found in path 'groups.$.features.$.name'"
}
})
O Mongo pozisyonel eleman vasıtasıyla diziler içinde yuvalanmış diziler değiştirerek desteklemediği görünüyor?
Bu diziyi, tüm şeyi dışarı çıkarmadan, değiştirmeden ve sonra yeniden yerleştirmeden değiştirmenin bir yolu var mı? Bu şekilde çoklu yerleştirme ile yeni bir koleksiyon oluşturmak standart uygulama mı? (Her ne kadar veriler yalnızca ana veriler gerekliyse bile gerekli olsa da) Belge yapısını, ikinci iç içe geçmiş dizinin bir nesne olacak şekilde değiştirmeli ve ona anahtar aracılığıyla erişmeli miyim? Bunu yapmak için "doğru" yolu olarak kabul edilir Ne
groups.$.features.[KEY].name
(Nerede anahtar bir "_ID" vazifesi görebileceğini bir tamsayı değeridir)?