Mongodb查询:查找存储在mongo中的地图是否包含特定值

时间:2013-02-04 09:33:32

标签: java mongodb

我有一个mongo集合如下:

    {
    "id": "510aec8e8426e96c156a0946",  
    "name": "ABC",
    "categoryToShardMap": null
    },
    {
    "id": "510aecd284268e0f60e547a5",
    "name": "XYZ",
    "categoryToShardMap": {
    "shoes": 1
    },
    {
    "id": "510aecbd84268e0f60e547a4",
    "name": "AAA",
    "categoryToShardMap": {
     "shoes": 3,
     "jeans": 2
     }

我将字段'categoryToShardMap'声明为:

    private HashMap<String, Long> categoryToShardMap;

我正在尝试创建一个REST Api,如果有人提供了shardId,他应该找回包含它的mongo文档。例如:如果我传递shardId = 3,我应该收到mongo文件:

    {
    "id": "510aecbd84268e0f60e547a4",
    "name": "AAA",
    "categoryToShardMap": {
    "shoes": 3,
    "jeans": 2
    }

我正在尝试使用java来执行此操作。但我不知道应该如何使用mongotemplate或DBObject查询。有人可以向我指出一些关于如何查询存储在mongo文档中的地图是否包含指定值的示例吗?

1 个答案:

答案 0 :(得分:0)

您可以通过$ne运营商执行此操作。只需检查该字段是否为空。

以下是使用javadriver实现此目的的示例。

new BasicDBObject("categoryToShardMap", new BasicDBObject("$ne", null));

或者您可以使用$ where运算符来检查数组的长度。这在以下帖子中解释:

  

Query for documents where array size is greater than 1

如果要在地图中查找特定值,可以使用以下命令:

DBObject query = BasicDBObjectBuilder.start().add("categoryToShardMap.shoes", 3).get(); // query for getting the documents whose "categoryToShardMap" field contains shoes with value 3