2

オブジェクトを格納するMongoDBでは、

{ array: ["a", "b", "c", ... ] }
{ array: ["a", "d", "f", ... ] }
...

"b" フィールドに egまたは "d"as の値を持つすべてのオブジェクトを取得したいと考えていますarray。これどうやってするの?私が試したのは

{ $match: { array: { $all: [ "b", "d" ] } } }

ただし、これには一致するために"b" andが存在する必要があります。 "d"

4

1 に答える 1

4

$orフィールドに対する単純なクエリで演算子を使用するarrayか、以下で Sammaye が指摘するように $in 操作を使用できます (これによりパフォーマンスが向上します)。

http://docs.mongodb.org/manual/reference/operator/or/#op._S_or

> db.coll.insert({ array: ["a", "b", "c"] })
> db.coll.insert({ array: ["a", "d", "f"] })
>
> db.coll.find({ array : 'b' })
{ "_id" : ObjectId("51cc7aa881e227fe57ccb569"), "array" : [ "a", "b", "c" ] }
>
> db.coll.find({ array : 'a' })
{ "_id" : ObjectId("51cc7aa881e227fe57ccb569"), "array" : [ "a", "b", "c" ] }
{ "_id" : ObjectId("51cc7ab481e227fe57ccb56a"), "array" : [ "a", "d", "f" ] }

$in:

> db.coll.find({ array : { $in : ['a', 'b'] } })
{ "_id" : ObjectId("51cc7aa881e227fe57ccb569"), "array" : [ "a", "b", "c" ] }
{ "_id" : ObjectId("51cc7ab481e227fe57ccb56a"), "array" : [ "a", "d", "f" ] }

> db.coll.find({ array : { $in : ['c', 'z'] } }) 
{ "_id" : ObjectId("51cc7aa881e227fe57ccb569"), "array" : [ "a", "b", "c" ] }

$または:

> db.coll.find({ $or : [ { array  : 'a' }, { array : 'b' } ] })
{ "_id" : ObjectId("51cc7aa881e227fe57ccb569"), "array" : [ "a", "b", "c" ] }
{ "_id" : ObjectId("51cc7ab481e227fe57ccb56a"), "array" : [ "a", "d", "f" ] }
>
> db.coll.find({ $or : [ { array  : 'c' }, { array : 'z' } ] })
{ "_id" : ObjectId("51cc7aa881e227fe57ccb569"), "array" : [ "a", "b", "c" ] }

配列フィールドにインデックスを追加すると、これらのクエリが高速になります。

于 2013-06-27T18:03:07.783 に答える