1

我有一个 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 文档中的地图是否包含指定值的示例吗?

4

1 回答 1

0

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

这是一个如何使用 javadriver 实现此目的的示例。

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

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

查询数组大小大于 1 的文档

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

DBObject query = BasicDBObjectBuilder.start().add("categoryToShardMap.shoes", 3).get(); // query for getting the documents whose "categoryToShardMap" field contains shoes with value 3
于 2013-02-04T10:07:31.200 回答