如何在mongodb中搜索记录而不提及字段名?
我正在mongodb中搜索满足搜索条件的查询。我在db集合中有一条记录:如何在mongodb中搜索记录而不提及字段名?,mongodb,Mongodb,我正在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"
{
"_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$/}})
要从每个字段(客户、电子邮件、提供商、地址、应用程序、电话)中搜索匹配的值,我必须用字段名写同一行,但如果我在booking对象下有100个字段,那么我需要用每个字段名写同一行100次。
我正在寻找一个从每个字段搜索的查询,为此我尝试了$text子句,如:bson.M{“\u id”:bson.M{'$type':“objectId”}
但是$text子句将只搜索全字而不是正则表达式(词干词)字示例:-“这是一个字符串”
在这一行中,我想搜索“str”
字,但它不会显示与其匹配的记录
有谁能给我举个例子吗。这要花我很多时间
感谢您帮助我解决这个问题。聚合框架就是解决这个问题的方法。正如@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)或两者的标准,等等)
如果您需要帮助来实现这一点,只需提供您的预期结果。您需要管理您的文档结构,这样您就不会有500个字段。另外,您的预订不是一个数组,而是一个对象。lol对于这个错误@prajvalM表示抱歉,那么我应该采用什么结构来简化预订?为什么您会有500个fields@prajvalm因为对象将根据用户所做的更改进行检索,所以我举一个例子,如果用户根据他/她更改了许多字段,那么错误请参阅我将运行此命令
db.system.aggregate[{$project:{role:1,date:1,idairement:1,booking_值:{$objectToArray:“$booking”},]
这给了我E QUERY[thread1]SyntaxError:expected expression,get']'@(shell):1:105
哦,太好了。@puneet5566788:该命令与matthPen建议的不完全一样。请多加注意。@SergioTulentsev yes Sorry先生你能告诉我我说的是正确的吗?或者wriongmatthPen
说,通过使用该命令,所有字段将变为k
和v
形式,然后我将使用单行命令轻松搜索记录。对吗?噢,谢谢你,先生@SergioTulentsev和matthPen