如何使用 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));
我刚刚学会了如何使用 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));