在 MongoDB 中存储对象的形式为
{ array: ["a", "b", "c", ... ] }
{ array: ["a", "d", "f", ... ] }
...
我想检索在其字段中具有例如"b"
或 "d"
作为值的所有对象。array
我怎样才能做到这一点?我尝试的是
{ $match: { array: { $all: [ "b", "d" ] } } }
但这需要"b"
并且 "d"
必须存在才能匹配。
您可以将$or
运算符与字段上的简单查询一起使用,也可以使用array
$in 操作,正如 Sammaye 在下面指出的那样(这将更有效率):
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" ] }
美元:
> 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" ] }
如果在数组字段上添加索引,这些查询会更快。