【问题标题】:Mongo db query with andmongodb查询和
【发布时间】:2014-11-11 01:32:21
【问题描述】:

我在 mongo 数据库中有我的数据,我的集合有两个字段,即created_attext,我想提取一个在 text 字段并具有 created_at 值为jan 15.。我是 mongodb 的新手,当我尝试使用下面的查询时,它给出的错误是“unexpected token

查询:

db.tweet.find({$and : [{"created_at" : /.*jan 15.*/i}, {"text : /.*bank.*/i, /.*chile.*/i, /.*fin.*/i "}]})

请建议我更正。在此先感谢

【问题讨论】:

    标签: regex mongodb mongodb-query


    【解决方案1】:

    这写错了。部分是在不需要 $and 的地方冗余使用,其次我认为你的意思是 $or 用于第二个条件。这实际上意味着以最简单的方式使用正则表达式:

    db.tweet.find({
        "created_at": /.*jan 15.*/i,
        "text": /bank|chile|fin/i
    })
    

    实际上,使用“单词边界”来进行更精确的“单词”匹配:

    db.tweet.find({
        "created_at": /.*jan 15.*/i,
        "text": /\bbank\b|\bchile\b|\bfin\b/i
    })
    

    如果你的意思是“和”,这意味着“文本”字段必须包含“所有”这些字符串,那么你需要一个$and 运算符。但与你的做法不同:

    db.tweet.find({
        "created_at": /.*jan 15.*/i,
        "$and": [
            { "text": /.*bank.*/i },
            { "text": /.*chile.*/i },
            { "text": /.*fin.*/i }
        ]
    }
    

    $and 的目的是允许“数组”构造,其中“相同”字段名称在不同条件下被引用。这样结构才有效,并且“键名”不会重复。

    否则所有 MongoDB 参数始终是隐含的“and”参数。

    【讨论】:

    • 感谢您的建议,我想要在文本字段中使用 and 运算符,但是当我使用您的第三个(最后一个)查询时,它除了“...”之外什么也没给我
    • 您需要这样的文本字段才能匹配:"There is a bank in chile which is hosted by a fin native"。除非那是你想要的,最后一种形式不是你想要的,你的意思是“或”。
    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多