1

我有一个 MongoDB 实例,我想通过检查是否同时满足多个正则表达式来搜索它。当我将 $all 与 /a/ 一起使用,或者我只使用 $regex 语法时,查询有效,但当我同时使用这两种语法时查询无效:

> db.claims.findOne({'tags': {$all: [/a/]}}, {description: 1, tags: 1})
{ "_id" : ..., "description" : "Test claim", "tags" : [ "general", "foobar" ] }
> db.claims.find({'tags': {$regex: 'a'}}, {description: 1, tags: 1})
{ "_id" : ..., "description" : "Test claim", "tags" : [ "general", "foobar" ] }
> db.claims.find({'tags': {$all: [{'$regex': 'a'}]}}, {description: 1, tags: 1})
> 

这是怎么回事?这两个一起用会不会有bug?

4

1 回答 1

3

如果我理解正确,使用$and应该可以解决问题。

db.claims.find({"$and" : [{"tags":{ $regex : 'a'}},{"tags":{ $regex : 'a'}}]}, {description: 1, tags: 1})

如果只需要满足一个正则表达式,请使用 $or。当然你可以混搭$or$and.

于 2013-01-07T04:29:30.697 回答