首页 > 解决方案 > Mongo DB搜索查询不给出结果

问题描述

db.feedback.find({
  "$or":[
    {"template_id":{"$regex":".*22532.*","$options":"i"}},
    {"user_id":{"$regex":".*22532.*","$options":"i"}}
  ]
})

template_id是一个字符串,user_id是 NumberLong 数据类型,它没有找到结果。如果我输入正确的值,它的给出结果template_id,只有 user_id 列似乎没有响应,有什么想法吗?

样本数据

{ "_id" : ObjectId("5ef21b7de21f8756b67da6e7"), "action_monkey" : 0, "feedback" : false, "more_feedback" : 0, "template_id" : "M23G5RK", "user_id" : 23423 }, /* 2 createdAt:6/15/2020, 3:16:53 PM*/ { "_id" : ObjectId("5ee74a95ae8ac276076db26a"), "action_monkey" : 0, "feedback" : false, "more_feedback" : 0, "template_id" : "M23G5RK", "user_id" : 23375 }, /* 3 createdAt:6/15/2020, 5:55:22 AM*/ { "_id" : ObjectId("5ee6c6faae8ac276076db24b"), "action_monkey" : 0, "feedback" : false, "more_feedback" : 0, "template_id" : "M23G5RK", "user_id" : 23423 }

标签: mongodbmongodb-query

解决方案


我对查询没有任何问题。

当您使用$or条件时,任何一种条件都应该为真。

我已经尝试过您的查询,您传递.*22532.*的值既不是 intemplate_id也不是 in user_id。因此,您没有获得任何数据。

请尝试以下查询

询问:

db.getCollection('test1').find(
{ "$or":[
  {"template_id":{"$regex":".*M23.*","$options":"i"}},
  {"user_id":{"$regex":".*23.*","$options":"i"}
 }]
})

结果来得很完美。

结果:

/* 1 */
{
    "_id" : ObjectId("5ef21b7de21f8756b67da6e7"),
    "action_monkey" : 0,
    "feedback" : false,
    "more_feedback" : 0,
    "template_id" : "M23G5RK",
    "user_id" : 23423
}

/* 2 */
{
    "_id" : ObjectId("5ee74a95ae8ac276076db26a"),
    "action_monkey" : 0,
    "feedback" : false,
    "more_feedback" : 0,
    "template_id" : "M23G5RK",
    "user_id" : 23375
}

/* 3 */
{
    "_id" : ObjectId("5ee6c6faae8ac276076db24b"),
    "action_monkey" : 0,
    "feedback" : false,
    "more_feedback" : 0,
    "template_id" : "M23G5RK",
    "user_id" : 23423
}

===== 编辑:=====

user_id整数值一样,正常的正则表达式过滤器不适用于整数值。因此,我们将整数值转换为字符串以应用正则表达式过滤器。

db.getCollection('test1').aggregate([
    { "$project": { 
            "user_id_s": { "$toLower": "$user_id" }, 
            "document": "$$ROOT"
        }
     },
     { "$match": {
        "$or":[
            {"document.template_id":{"$regex":".*M23123.*","$options":"i"}},
            {"user_id_s":{"$regex":".*23.*","$options":"i"}}
         ]
     
     }},
    {
        "$replaceRoot": {
            newRoot: "$document"
        }
    }
])

推荐阅读