我有一个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"}
答案 0 :(得分:3)
你去吧 -
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
的组合作为伞形运算符,它允许您执行组合用户记住的任何一个查询,每个查询都包含{ {1}}运算符可帮助您创建用户记住的字段组合。这将是一个冗长的查询,但比大量的空检查和字符串操作更好。在最坏的情况下,它将是具有多个字段的笛卡尔乘积,并且都是运算符。希望这会有所帮助。
答案 1 :(得分:0)
在MongoDB中,您可以使用and / or条款进行查询。
例如:
db.collection.find( { $or: [ { field1: "hi" }, { field1: "hello" } ] } )
答案 2 :(得分:0)
您必须在$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
]
})