我正在尝试查询以下MongoDB文档结构;
{
"key": [{
"1": [
2,
3,
4
]
},
{
"2": [
1
]
}
]
}
我想要的是key
字段内的所有文档,其子字段为" 1"。与之关联的数组是[2,3,4],它们是java Long值。我试图使用以下代码执行上述逻辑,但没有运气;
BasicDBObject query = new BasicDBObject("key.1", null);
MongoCursor<BasicDBObject> cursor = collection.find(query).iterator();
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
我在查询对象中将key.1
与null关联的原因是因为我不关心数组中的值是什么。
答案 0 :(得分:0)
你在这里混合了几件事。
key.1
是用于使用数字字符串名称查询子字段的冲突点表示法语法。
这将与数组key
的基于索引的访问冲突。
BasicDBObject query = new BasicDBObject("key.1", null);
实际上是要求Mongo在索引1处为key
值查询值{/ 1}数组。如果您有类似
null
好的,现在回来发帖。如果您不关心价值,则必须使用{
"key":
[
{"1":"one"},
null
]
}
运营商。 shell过滤器将为$exist
。请注意使用{"key":{"$elemMatch":{"1":{ $exists: true}}}}
进行字段级别比较,因为点符号与索引样式访问冲突。对于字符串名称字段,点符号&amp;对于涉及单个查询条件的查询,elemMatch对嵌入式数组的工作方式类似。
Java代码
$elemMatch
有关运算符和语法的详细信息。
https://docs.mongodb.com/manual/reference/operator/query/exists/
https://docs.mongodb.com/manual/reference/operator/query/elemMatch/#op._S_elemMatch