MongoDB使用正则表达式按标签搜索

时间:2014-11-08 07:39:55

标签: regex mongodb mongodb-query

假设我的模型看起来像:

{_id: ..., tags: ["stackoverflow", "github", "bootstrap", ...]}

如何搜索符合 BOTH /stack//git/的所有商品?

2 个答案:

答案 0 :(得分:1)

有mongo正则表达式doc http://docs.mongodb.org/manual/reference/operator/query/regex/

db.collection.find(
{
$and :
    [
    { tags: { $regex: /git/ } },
    { tags: { $regex: /boot/ } }
    ]        
})

此解决方案可能对您有所帮助 Searching in MongoDB

答案 1 :(得分:0)

只是认为这个问题/以前的答案可以改进:

解决此问题时首先想到的解决方案是:

db.collection.find({ tags: { $regex: /git/ }, tags: { $regex: /stack/ }}

但是这会导致找到仅匹配'堆栈的标记项目,因为mongo以这种方式构建此查询,导致第一个标准被第二个标准覆盖(因为它们具有相同的密钥' ;标记'。)

因此,正确的解决方案是:

db.collection.find(
{
$and :
    [
    { tags: { $regex: /git/ } },
    { tags: { $regex: /stack/ } }
    ]        
})

哪个文档会找到符合正则表达式条件的文档' git'并且'堆叠'虽然语法有点人为。