Mongodb $ elemMatch在地图内查询

时间:2013-12-23 16:19:34

标签: mongodb map

我需要在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功能。

提前致谢。

2 个答案:

答案 0 :(得分:0)

AFAIK无论如何都无法使用当前的MongoDB运营商,无需编写脚本或映射/缩减或知道要提前查询的密钥。

作为旁注,您应该根据自己想要的方式来考虑数据结构 - 即您应该考虑将渠道文档转换为数组。

答案 1 :(得分:0)

我在上面的示例代码中没有看到任何数组,数组必须看起来像myarray [1,2,3]

因此,如果您想搜索子字段值,请使用此示例代码,您可以尝试以下操作。

>db.Collection.find({"channels.value" : "dominik.czech.aal@gmail.com"})

希望这会有所帮助.....