在 MongoDB 中使用 $and 的多个 $regex

its*_*oma 5 regex sql mongodb

我有一些带有下一个记录的集合:

{
    "_id" : ObjectId("52b18fb2a21351b2bb29dfc7"),
    "title" : "aaa"
}
{
    "_id" : ObjectId("52b18fd0d17d7f69e078f7b7"),
    "title" : "bbb"
}
{
    "_id" : ObjectId("52b18fd3d17d7f69e078f7b8"),
    "title" : "ccc"
}
Run Code Online (Sandbox Code Playgroud)

下一个查询给出了我们预期的 1 条记录(标题为“aaa”):

db.test.find({
     {title:{$regex:'aaa'}}
})
Run Code Online (Sandbox Code Playgroud)

但是当我们对 $ 使用复杂条件时,我们得到了一些意想不到的东西:

db.test.find({
    $and: [
        {title:{$regex:'aaa'}},
        {title:{$regex:'bbb'}}
    ]
})
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我需要完全查询,因为我将使用带有停用词的选择,例如:

db.test.find({
    $and: [
        {title:{$regex:'aaa'}},
        {title:{$regex:'bbb'}},
        {title:{$not:/bbb/i}},
    ]
})
Run Code Online (Sandbox Code Playgroud)

使用上面的查询,我期望结果中只有一个字段(标题 =“aaa”)。

我知道如何使用聚合解决这个问题,但我希望有另一种方法来解决它。

谢谢!

And*_*hyn 5

只需构建正确的正则表达式

pattern "/A AND B/"
pattern "/NOT (NOT A OR NOT B)/"
Run Code Online (Sandbox Code Playgroud)

正则表达式:

"/^(^A|^B)/"
Run Code Online (Sandbox Code Playgroud)

或者这个

/(?=.*word1)(?=.*word2)/
Run Code Online (Sandbox Code Playgroud)