mongo/mongoose(バージョン3.4.0を使用)が新しく、指定された条件に一致するドキュメントJSON配列のサブセットを返すクエリを書きたいと思います。 私のドキュメントモデルにはJSONの配列が含まれています。クエリが一致する配列内のレコードと特定のフィールドのみを返すようにしたいと思います。ここでMongooseクエリーを入れ子にしたjson配列、選択したフィールドを返す
は、例スキーマです:
Var testSchema = Schema({
name: { type: String },
bag: { type: Array} // JSON row data, containing fields name, phone, etc...
});
例データ:
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"}
]
それとも
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'}]})
私はこのデータを照会できるようにしたいが、唯一返しますクエリ項目「apple」と一致する「bag」データを返し、「bag」からの「item」と「color」フィールドのみを返します。
Name: "alpha", bag: [{ item: "apple", color: "red" }, { item: "apple", color: "green" }]
Name: "beta", bag: [{ item: "apple", color: "brown" }, { item: "apple", color: "green" }]
私は試合やプロジェクトで集計を使用して試してみました:
db.tests.aggregate([
{"$match":{"bag.item":"apple"}},
{"$project":{
"Bag.item":{
"$filter":{
"input":"$bag",
"As":"bag",
"cond":{"$eq":["$$bag.item", "apple"]}
}},
"Bag.color":1
}}]);
しかし、これはすべての項目だけではなく、りんごの色フィールドを返し、まだサイズフィールドを返します。
Mongodb Trying to get selected fields to return from aggregate
Retrieve only the queried element in an object array in MongoDB collection
をまだネストされたJSON配列内の項目を制限する方法を考え出したていない:
私はこれらの見てきました。
mongodbサーバーのバージョンは何ですか? – Veeram
db.version()は3.4.0 – J21042