如何使用 distinct/aggregate 获取匹配多个查询的所有字段

How to use distinct/aggregate to get all fields that match several queries

我刚刚学会了如何使用 distinct。

我所做的是创建一个 BasicDBObject,作为查询参数来区分我想要相等的内容,作为字段参数来区分我想要的内容 returned.

现在我想做一些类似的事情,但有几个查询。这意味着,我希望查询匹配文档的几个键(id 和日期必须与我得到的输入相同),并且 return 哪些会话与集合中的会话匹配。

我尝试做一些类似于查找的事情,但对于不同的,您可以在查询参数中使用 append() 或 put() 添加更多字段。

这个语法好像不行,而且我发现没有人使用类似的代码,所以我想这是不可能的。

我找到了 aggregate() 方法,但它似乎用于匹配多个 FIELDS,而不是查询。用代码解释:

array.put(coll.distinct(field, query));

我希望该查询参数有多个键,以便所有字段都匹配我的输入,并且我找到了与查询中的两个(或尽可能多的)键匹配的字段的唯一值。

提前致谢!

编辑:

基础:MongoDB3.2.2

数据操作:

"Session" : "value1", "car" : "carNumber", "date" : "20130321"

我有一个非常大的集合,其中包含许多文档,其中包括这些关键字。我想,给定一辆车和一个数字,得到每个 UNIQUE 会话值 ,并将其 return 作为 json(为此,到目前为止,我将值放入一个数组中,并转化为 json).

driver/framework具体问题:我不知道在mongodbshell中查询这个。我知道使用不同的,但不是聚合器。

你的问题有多个部分。我想回答以粗体突出显示的最后一部分。解决方案写在 Java 中,因为线程被标记为 Java.

下面的代码将为您提供汽车和汽车编号的不同会话值。您可以根据需要相应地更改过滤器。

以下代码满足您要求的基本不同概念。我假设您可以将代码添加到 JSON 中的结果集(您可以使用 Jackson 或 Gson 库来生成 JSON)。

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoReadDistinct {

    public static void main(String[] args) {
        MongoClient client = new MongoClient();
        MongoDatabase database = client.getDatabase("cars");

        MongoCursor<String> mongoCursorIds = database
                .getCollection("sessions").distinct("Session",
                        Filters.and(Filters.eq("car", "Nisson_Note"), Filters.eq("carnumber", 123)), String.class)
                .iterator();

        while (mongoCursorIds.hasNext()) {
            System.out.println(mongoCursorIds.next());

            //You can convert the result to JSON
        }

    }

}

示例数据:-

/* 1 */
{
    "_id" : ObjectId("576a6860d317ab85059c76d4"),
    "Session" : "value1",
    "car" : "Nisson_Note",
    "carnumber" : 123,
    "date" : "20130321"
}

/* 2 */
{
    "_id" : ObjectId("576a6896d317ab85059c76d5"),
    "Session" : "value2",
    "car" : "Nisson_Note",
    "carnumber" : 123,
    "date" : "20130321"
}

/* 3 */
{
    "_id" : ObjectId("576a68b4d317ab85059c76d6"),
    "Session" : "value2",
    "car" : "Nisson_Note",
    "carnumber" : 123,
    "date" : "20140321"
}

输出:-

值1 值 2

好吧,回答我自己的问题,实际上可以用不同的方法进行多个查询,它可以在 mongodb shell 和 java 驱动程序中完成(不幸的是,我没有得到其他答案,不是错,我只是没有成功。

所以 mongodb shell(我把它包括在内是因为我也不知道这样做,这是问题的一部分):

db.colectionLocalCC.distinct("Session", {date: "20130303", Car: "55"})

对于mongodb:

BasicDBObject query = new BasicDBObject();
        query.put("date", date);
        query.put("car",car);

        String fields = "Session";

        array.put(coll.distinct(fields, query));