0

そのため、指定されたタグ (つまり、「a」、「b」、または「c」) のいずれかを持つドキュメントを検索しようとしています。

MongoDB クエリは次のとおりです。

db.my_collection.find({ "tags" : { "$elemMatch" : { "$in" : ["a", "b", "c"] } } })

これは問題なく機能します (tags は、ドキュメントのタグの配列であるドキュメント フィールドです)。問題は、SpringData Query および Criteria オブジェクトを使用してこのクエリを作成しようとしたときです。

List<String> tags = Arrays.asList("a", "b", "c");
Criteria inTags = new Criteria().in(tags);
Criteria where = Criteria.where("tags").elemMatch(inTags);
Query query = new Query(where);
System.out.println(query);

これの出力は次のとおりです。

Query: { "tags" : { "$elemMatch" : { }}}, Fields: null, Sort: null

もちろん、これは私にとってはうまくいきません。これをSpringDataクエリ/基準で機能させる方法を知っている人はいますか? 私は醜い回避策やMongoDB Javaドライバーを直接使用することに興味はありません-私はそれを行うことができます. SpringData クラスでこれを正しく行う方法があるかどうか知りたいです。

4

1 に答える 1

2

$elemMatch単一の配列要素内の複数のフィールドに一致することを意図しているため、ここでは非標準的な方法で使用しています。代わりに次のようなクエリを使用します。

db.my_collection.find({ "tags": "$in": ["a", "b", "c"] })

これにより、SpringData での作業がより簡単になるはずです。

于 2013-05-03T13:05:12.797 に答える