MongoDB'nin belgelerine bakıyorum $
ve projeksiyonları. Bir yansıtma dizisinin alanlarının yalnızca bir alt kümesini nasıl döndüreceğimi anlamaya çalışıyorum, ancak bunu anlayamıyorum.Yalnızca projeksiyon dizisi alt belgesindeki belirli alanları döndürün
İlgili mesajlar:
Ben mongodb aggregation framework - Fetch first document's field of the nested array bir $slice gerçekleştirmek için çalışmıyorum. Alt belgeyi Return only array value in mongo projection'dan düzleştirmeye çalışıyorum, çünkü hala üstteki belgeden bazı alanlar istiyorum.
db.test.findOne({"array.key": 1}, {"array.$.name": 1, "extra": 1})
Ki bu sadece
name
dönmek için beklediğiniz:{ "_id": "A", "array": [ {"key": 1, "name": "foo", "data": {}}, {"key": 2, "name": "bar", "data": {}} ], "extra": {} }, { "_id": "B", "array": [ {"key": 3, "name": "spam", "data": {}}, {"key": 4, "name": "eggs", "data": {}} ], "extra": {} }
ben etkili gerçekleştirmek istediğiniz sorgu:
test
koleksiyonunda aşağıdaki belgeleri var ki Alt-belge altında
key
1
olduğu dizisinde. O sorgu gerçekleştirirseniz Örneğin,
{
"_id": "A",
"array": [
{"name": "foo"}
],
"extra": {}
}
Ama bu yerine alıyorum: sorgusu yapıyor aynıdır
{
"_id": "A",
"array": [
{"key": 1, "name": "foo", "data": {}}
],
"extra": {}
}
:
db.test.findOne({"array.key": 1}, {"array.$": 1, "extra": 1})
şunlarla denedim sonuç aynı:
Tüm alt belgenin yerine yalnızca array.$
alanlarının bir alt kümesini döndürmenin bir yolu var mı?
Birden çok belgeyi bir araya getirmediğim için, kümelenmenin yapmaya çalıştığım şeyi gerçekleştirebileceğinin farkında değildim. – cpburnz
Ama eğer agregaları kullanamıyorsanız? $ Operatörü kullanabilir ve bu gibi bir güncellemede bir alt alana erişebildiğiniz için biraz kafam karıştı: db.students.update ( {_id: 4, "grades.grade": 85}, {$ set: {"notları. $. std": 6}} ) ' – Bilk