使用Java进行MongoDB查询。计算数组

时间:2016-07-01 18:13:39

标签: java arrays mongodb

我将数据存储在Mongo中,类似于以下内容:

{
"LIST" : [
    {"NAME" : "a", "VALUE" : "z"},
    {"NAME" : "b", "VALUE" : "y"},
    {"NAME" : "c", "VALUE" : "x"},
    {"NAME" : "d", "VALUE" : "w"},
    {"NAME" : "e", "VALUE" : "v"},
    {"NAME" : "f", "VALUE" : "u"}
    {"NAME" : "f", "VALUE" : "t"}
    {"NAME" : "f", "VALUE" : "s"}
    ]
}

我正在使用java编写所有这些。

我收到一个NAME / VALUE对列表,我必须找到包含所有这些名称值对的所有记录。好的,这很容易。

让A,B,C,D,......表示我想要找到的单个NAME / VALUE对。

让A代表{" NAME" :" a"," VALUE" :" z"}。显然,我有一个匹配,这很容易。实际规则更像是:

查找所有文件,以便(1)NAME / VALUE匹配或该对象不包含NAME的条目。

到目前为止,这很容易。我用" $ elemMatch"放置NAME和VALUE以匹配相同的数组元素。要检查是否存在具有特定名称的元素,我使用类似的东西:

new BasicDBObject("LIST", new BasicDBObject("$not", new BasicDBObject("$elemMatch", new BasicDBObject("NAME", "a"))))

然后我将其与搜索完全匹配。或者

现在是困难的部分。

我必须只返回具有最少匹配数的文档。在我的情况下,我可能有20个NAME / VALUE对,我需要匹配至少10个。没有类似的规则,我将每个文档与零匹配元素匹配。

我最好的猜测是我需要使用某种$ group  或聚合

0 个答案:

没有答案