私は初心者です。しかし、私はクエリを書くための最も論理的な方法を学ぼうとしています。2つの異なるフィールドで値を検索するmongodb + node.js
私は次のようなコレクションを持っているとします。
{
"id" : NumberInt(1),
"school" : [
{
"name" : "george",
"code" : "01"
},
{
"name" : "michelangelo",
"code" : "01"
}
],
"enrolledStudents" : [
{
"userName" : "elisabeth",
"code" : NumberInt(21)
}
]
}
{
"id" : NumberInt(2),
"school" : [
{
"name" : "leonarda da vinci",
"code" : "01"
}
],
"enrolledStudents" : [
{
"userName" : "michelangelo",
"code" : NumberInt(25)
}
]
}
私はそれらに対応するcode
値でkey
の発生を一覧表示します。一例として、key
:キーの発生を検索するにmichelangelo
、私はように2つのdifferen aggregation
クエリを書きました。
db.test.aggregate([
{$unwind: "$school"},
{$match : {"school.name" : "michelangelo"}},
{$project: {_id: "$id", "key" : "$school.name", "code" : "$school.code"}}
])
と
db.test.aggregate([
{$unwind: "$enrolledStudents"},
{$match : {"enrolledStudents.userName" : "michelangelo"}},
{$project: {_id: "$id", "key" : "$enrolledStudents.userName", "code" : "$enrolledStudents.code"}}
])
これら2つのクエリの結果は、私が欲しいものとして返します。それらの
{ "_id" : 1, "key" : "michelangelo", "code" : "01" }
{ "_id" : 2, "key" : "michelangelo", "code" : 25 }
一つenrolledStudents
で検索するには、他の一つはschool
フィールドで検索されます。
これらの2つのクエリをより論理的なクエリに減らすことはできますか?それともこれが唯一の方法ですか?
ps:私はデータベース構造が論理的ではないことを認識していますが、私はシミュレートしようとしました。
編集 私は検索でクエリを書き込もうとしています。
db.test.find({$or: [{"enrolledStudents.userName" : "michelangelo"} , {"school.name" : "michelangelo"}]}).pretty()
しかし、これはドキュメント全体を返します。
{
"id" : 1,
"school" : [
{
"name" : "george",
"code" : "01"
},
{
"name" : "michelangelo",
"code" : "01"
}
],
"enrolledStudents" : [
{
"userName" : "elisabeth",
"code" : 21
}
]
}
{
"id" : 2,
"school" : [
{
"name" : "leonarda da vinci",
"code" : "01"
}
],
"enrolledStudents" : [
{
"userName" : "michelangelo",
"code" : 25
}
]
}