[英]Searching multiple fields in mongodb
我有一个mongo收藏。 现在,用户可以根据需要使用任何字段或所有字段进行搜索。
例如:-用户可以使用他记得集合中存在的字段的任何一个属性或任何两个属性或任意数量的属性进行搜索。 帮助我确定应该使用哪个运算符或运算符组合?
{"_id":1, "field1":"hi","field2":"bye","field3":"bro", "field4":"stuff"},
{"_id":2, "field1": "hello", "field2": "back", "field3": "fat", "field4":"cat"},
{"_id":3, "field1": "some", "random": "foo", "stuff": "bar", "field4":"help"}
干得好 -
db.test.find({
$or:[
{
$and: [
{'stocknumber':12346},
{'model':'bmx'},
{'make':2002},
{'rego':'KA01HG6268'},
{'adate':'2017-10-01T05:07:10.969Z'},
{'cdate':'2017-10-01T05:07:10.969Z'}
]
},
{
$and: [
{'stocknumber':12347},
{'model':'bmy'},
{'make':2003}
]
}
]
}).pretty()
您可以在上面的示例中使用$and
和$or
组合$or
充当伞形运算符,它使您可以执行组合用户记得的任何一个查询,每个查询都包含一个$and
运算符,可帮助您创建用户记住的字段组合。 这将是一个冗长的查询,但是比许多空检查和字符串处理要好。 在最坏的情况下,它是字段数和两个运算符的笛卡尔积。 希望这可以帮助。
您必须将用户可以搜索的参数包装在$or
周围。 然后,每个可以搜索的字段都必须使用$in
运算符。
db.getCollection('collection').find({
$or: [
{field1: {$in: ["hi", "hello", "some"]}},
{field2: {$in: ["bye", "back", "some"]}},
{field3: {$in: ["bye", "back", "some"]}},
// etc. add your other fields as well here
]
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.