我需要在mongodb中搜索具有特定值的地图元素。
我在数据库中有这个元素:
{
"_id": ObjectId("52950e93c4aad399cff0d9f9"),
"_class": "com.company.model.customer.DbCustomer",
"version": NumberLong(0),
"channels": {
"adea3d4e-2a73-4f3e-8a89-a336d6132909": {
"value": "dominik.czech.aal@gmail.com",
"alias": "email1",
"deliveryChannel": "EMAIL",
"status": "GOOD",
"_class": "com.company.model.customer.CustomerEmail"
}
}
}
其中“adea3d4e-2a73-4f3e-8a89-a336d6132909”是频道地图的关键。
我想要搜索的是具有一定价值的频道。
如果“channels”是一个数组,那么查询将是这样的:
{ "channels" :
{ "$elemMatch" : { "value" : "dominik.czech.aal@gmail.com" } }
}
但是,由于频道是地图,我不能使用这种方法。
是否可以按照在数组内搜索的方式在地图内搜索?
请注意,我想使用单个查询,出于安全考虑,我无法在数据库中使用map reduce功能。
提前致谢。
答案 0 :(得分:0)
AFAIK无论如何都无法使用当前的MongoDB运营商,无需编写脚本或映射/缩减或知道要提前查询的密钥。
作为旁注,您应该根据自己想要的方式来考虑数据结构 - 即您应该考虑将渠道文档转换为数组。
答案 1 :(得分:0)
我在上面的示例代码中没有看到任何数组,数组必须看起来像myarray [1,2,3]
因此,如果您想搜索子字段值,请使用此示例代码,您可以尝试以下操作。
>db.Collection.find({"channels.value" : "dominik.czech.aal@gmail.com"})
希望这会有所帮助.....