MongoDB QueryBuilderに問題があります。MongoDB単一エントリと配列要素の両方に一致するクエリ
{
"_id": "document1",
"data": {
"user": {
"credentials": {
"name": "John",
"lastname": "Watson",
"middle": "Hemish"
}
}
}
}
{
"_id": "document2",
"data": {
"user": [
{
"credentials": {
"name": "John",
"lastname": "Nicholson",
"middle": "Joseph"
}
},
{
"credentials": {
"name": "Mary",
"lastname": "Watson",
"middle": ""
}
}
]
}
}
{
"_id": "document3",
"data": {
"user": [
{
"credentials": {
"name": "John",
"lastname": "Watson",
"middle": "Hemish"
}
},
{
"credentials": {
"name": "John",
"lastname": "Nicholson",
"middle": "Joseph"
}
},
{
"credentials": {
"name": "Mary",
"lastname": "Watson",
"middle": ""
}
}
]
}
}
私は何をしようとしていますが、ユーザーとしてのジョン・ワトソンを含むドキュメントのみが返されますクエリは、次のとおりです。
は、私は1人以上のユーザーを含めることができる文書の数を、持っていると仮定します。私がこれまでに得たものをここで:文書1には、アレイと文書2での一致がない(しかし、私はそれをしたいと思います:
1.
QueryBuilder qb = QueryBuilder.start("credentials.lastname").is("Watson").and("credentials.name").is("John");
DBObject query = QueryBuilder.start("data.user").elemMatch(qb.get()).get();
このクエリのみdocument3を返します。文書1とdocument3)
2.
を戻しますこれは3つのドキュメントすべてを返します:document1とdocument3が一致することが望ましいですが、クエリはWatsonとJohnが配列内のクエリフィールドにあるのでdocument2と同様に一致します。
John Watsonに対してdocument1とdocument3が返される正しいクエリを作成する方法はありますか?
私はJavaでそれをやろうとしていますが、他の例であれば問題ありません。
私はelementMatch()でクエリからlimit(100)の結果を取得し、結果が100件未満の場合は2番目のクエリを実行してすべてをフィルタリングします間違った一致。しかし、私はその結果を得るためのより良い、より効果的な方法があることを願っています。
あなたは、クエリビルダフォームに集計クエリを変換できますか? – manetsus
少なくとも私はこれを試すことができます、ありがとう! – yggdraa
ありがとうございました:) – manetsus