我正在mongodb中搜索满足我的搜索条件的查询。我在db集合中有一条记录:
{
"_id": ObjectId("5b3d970398e9d099427896c3"),
"role": "New Booking is there by abc",
"date": "07/04/2018",
"idaddress": "213.123.123.213",
"booking": {
"bedroom": 4,
"bathroom": 6,
"customer": "abc",
"email": "abc@gmail.com",
"provider": "provider1",
"address": "brazil",
"appt": "123456",
"phone": "987654321"
}
}
在此记录booking
对象中有8个字段,为了进行搜索,我正在使用查询:
db.collection_name.find({ "booking.field_name" : {$regex : /data$/}})
要搜索与每个字段(客户,电子邮件,提供商,地址,appt,电话)匹配的值,我必须在字段名称中写同一行,但是如果预订对象下有100个字段,则需要每个字段名称在同一行写100次。
我正在寻找一个从每个字段中搜索的查询,为此,我尝试了$ text子句,例如:bson.M {“ _ id”:bson.M {'$ type':“ objectId”}}
但是$ text子句只会搜索完整的单词,而不是正则表达式(词干)单词示例:-"This is a string"
在此行中,我想搜索"str"
单词,但不会显示匹配的记录
任何人都可以提出任何示例。这需要我很多时间。
帮助我解决了这个问题,谢谢。
答案 0 :(得分:2)
聚合框架就是方法。正如@Prajval所说,您有一个对象,因此解决方案是在查询之前将其转换为数组。这是代码:
db.test1.aggregate(
[
{
$project: {
role:1,
date:1,
idadress:1,
booking_values:{$objectToArray:"$booking"}
}
},
]
);
这将输出
{
"_id" : ObjectId("5b3d970398e9d099427896c3"),
"role" : "New Booking is there by abc",
"date" : "07/04/2018",
"booking_values" : [
{
"k" : "bedroom",
"v" : NumberInt(4)
},
{
"k" : "bathroom",
"v" : NumberInt(6)
},
{
"k" : "customer",
"v" : "abc"
},
{
"k" : "email",
"v" : "abc@gmail.com"
},
{
"k" : "provider",
"v" : "provider1"
},
{
"k" : "address",
"v" : "brazil"
},
{
"k" : "appt",
"v" : "123456"
},
{
"k" : "phone",
"v" : "987654321"
}
]
}
从这里您可以轻松地添加聚合阶段以获得所需的准确结果。 (整个文件或仅与条件相匹配的预订值,预订字段名称(k)的条件,预订字段值(v)或两者都有的条件,等等...)
如果您需要帮助来实现这一目标,只需提供预期的结果即可。