我有一个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文档中的地图是否包含指定值的示例吗?
答案 0 :(得分:0)
您可以通过$ne
运营商执行此操作。只需检查该字段是否为空。
以下是使用javadriver实现此目的的示例。
new BasicDBObject("categoryToShardMap", new BasicDBObject("$ne", null));
或者您可以使用$ where运算符来检查数组的长度。这在以下帖子中解释:
如果要在地图中查找特定值,可以使用以下命令:
DBObject query = BasicDBObjectBuilder.start().add("categoryToShardMap.shoes", 3).get(); // query for getting the documents whose "categoryToShardMap" field contains shoes with value 3