Ich bin neu zu Mongo/Mungo (mit Version 3.4.0), und ich möchte eine Abfrage schreiben, die eine Teilmenge eines Dokuments JSON-Array, die ein bestimmtes Kriterium entspricht zurückgibt. Mein Dokumentmodell enthält ein Array von JSON, und ich möchte, dass die Abfrage nur die Datensätze in dem Array zurückgibt, in dem eine Übereinstimmung auftritt, und nur bestimmte Felder. HierMongoose-Abfrage verschachtelte JSON-Array, zurückgewählte Felder
ist ein Beispiel Schema:
Var testSchema = Schema({
name: { type: String },
bag: { type: Array} // JSON row data, containing fields name, phone, etc...
});
Beispieldaten:
name: "alpha",
bag: [
{ item:"apple", color:"red", size:"small"},
{ item:"pear", color:"white", size:"small"},
{ item:"apple", color:"green", size:"large"}
]
name: "beta",
bag: [
{ item:"apple", color:"brown", size:"small"},
{ item:"pear", color:"white", size:"small"},
{ item:"apple", color:"green", size:"medium"}
]
Oder
db.tests.insert({name:'alpha', bag:[{ item:'apple', color:'red', size:'small'},{ item:'pear', color:'white', size:'small'},{ item:'apple', color:'green', size:'large'}]})
db.tests.insert({name:'beta', bag:[{ item:'apple', color:'brown', size:'small'},{ item:'pear', color:'white', size:'small'},{ item:'apple', color:'green', size:'medium'}]})
Ich mag wäre in der Lage sein, diese Daten abzufragen, sondern nur kehren die "bag" -Daten, die dem Abfrageartikel "apple" entsprechen und nur die Felder "item" und "color" aus "bag" zurückgeben.
Name: "alpha", bag: [{ item: "apple", color: "red" }, { item: "apple", color: "green" }]
Name: "beta", bag: [{ item: "apple", color: "brown" }, { item: "apple", color: "green" }]
Ich habe versucht, mit Spiel und Projekt mit Aggregate:
db.tests.aggregate([
{"$match":{"bag.item":"apple"}},
{"$project":{
"Bag.item":{
"$filter":{
"input":"$bag",
"As":"bag",
"cond":{"$eq":["$$bag.item", "apple"]}
}},
"Bag.color":1
}}]);
Aber das gibt das Farbfeld für alle Elemente, nicht nur Äpfel und gibt immer noch die Größe Feld.
Mongodb Trying to get selected fields to return from aggregate
Retrieve only the queried element in an object array in MongoDB collection
aber immer noch nicht herausgefunden, wie die Elemente in der verschachtelten JSON-Array zu begrenzen:
Ich habe diese gesehen.
was ist ihre mongodb server version? – Veeram
db.version() ist 3.4.0 – J21042