我是 MongoDB 的新手,所以如果我错过了文档中的某些内容,请原谅我。我有一个这样的收藏
[date: "2015-12-01", status: "resolved", parentId: 1]
[date: "2015-12-01", status: "resolved", parentId: 2]
[date: "2015-12-01", status: "resolved", parentId: 2]
[date: "2015-12-01", status: "waiting", parentId: 2]
[date: "2015-12-02", status: "resolved", parentId: 1]
[date: "2015-12-02", status: "waiting", parentId: 2]
[date: "2015-12-02", status: "waiting", parentId: 2]
[date: "2015-12-03", status: "resolved", parentId: 1]
Run Code Online (Sandbox Code Playgroud)
我期望对按以下分组的输出求和
日期 -> 父 ID -> 状态
所以那就是
{
"2015-12-01": {
"1": {
"resolved": 1
},
"2": {
"resolved": 2,
"waiting": 1
}
}
"2015-12-02": {
"1": {
"resolved": …Run Code Online (Sandbox Code Playgroud) 嘿,
我需要一些帮助将以下 MongoDB 查询转换为 MongoDB Java 驱动程序查询。
请注意,查询有效。
db.days.aggregate([
{ $match: { 'day' : 'March_1'}},
{ $project: {
_id : 0,
day: 1,
events: {$filter: {
input: '$events',
as: 'event',
cond: {$eq: ['$$event.year', '2002']}
}}
}}
])
Run Code Online (Sandbox Code Playgroud)
我的尝试是这样的,但失败了,我需要你的帮助。
Document query = new Document("$match", new Document("day", day)).
append("$project", new Document("_id", 0).
append("day", 1).
append("events", new Document("$filter", new Document(
"input", "$" + category).
append("as", "event").
append("cond", new Document("$eq", Arrays.asList("$$event.year", year))))));
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
"{ "ok" : 0.0, "errmsg" : "A pipeline stage specification object …Run Code Online (Sandbox Code Playgroud) 我有两个模式users和Lessons。我必须按每个用户获取课程组。我还将用户的参考 ID 存储在课程模式中。
为了获得结果,我按照以下格式完成了聚合查询
db.lessons.aggregate([{
$lookup: {
from: "users",
localField: "user",
foreignField: "_id",
as: "user"
}
}, {
"$project": {
"user": "$user.email",
"title": "$title",
"scheduled_at": "$scheduled_at"
}
}, {
$group: {
_id: "$user",
num_lessons: {
$sum: 1
},
lessons: {
$push: {
title: "$title",
schedule: "$scheduled_at"
}
}
}
}])
Run Code Online (Sandbox Code Playgroud)
从上面的查询我能够得到如下的输出,
{
"_id" : [
"harry.quill@gmail.com"
],
"num_lessons" : 1.0,
"lessons" : [
{
"title" : "welcome to Mongoose",
"schedule" : { …Run Code Online (Sandbox Code Playgroud) 这是订单实体:
public class Order
{
@Id
private String id;
private String internalId;
private String externalId;
private String status;
}
public class OrderAssigned
{
@Id
private String id;
private String internalId;
private String externalId;
private String stationId;
private String rejectStatus;
}
Run Code Online (Sandbox Code Playgroud)
我想加入这两个集合。
stationIdOrders.internalId和OrderAssigned.internalId和status = "OrderCreated"就像这个 SQL 查询:
select orders.*
from PARTNER_RESTAURANT_ORDER orders
inner join PARTNER_RESTAURANT_ORDER_ASSIGNED_STATION assigned_station on orders.internalId = assigned_station.internalId
where assigned_station.stationId = "5e2968e2763e750001c8ba5f"
and orders.status = "OrderCreated"
Run Code Online (Sandbox Code Playgroud) 我有一个类似的 mongodb 集合:
{ "_id" : 1, "item" : "item1", "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "item2", "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "item2", "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "item1", "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "item2", "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }
Run Code Online (Sandbox Code Playgroud)
我想获取每个项目的最新文档(基于日期值)
意味着我想要一个查询/聚合给我:
{ …Run Code Online (Sandbox Code Playgroud) 记录是数据库:
[
{
"title": "title1",
"author": [
{
"name": "user1",
"register": true
},
{
"name": "user2",
"register": true
}
],
"tags": [
"tag1",
"tag2",
"tag3"
]
},
{
"title": "title2",
"author": [
{
"name": "user1",
"register": true
},
{
"name": "user2",
"register": true
}
],
"tags": [
"tag1",
"tag2",
"tag3"
]
},
{
"title": "title3",
"author": [
{
"name": "user1",
"register": true
},
{
"name": "user2",
"register": true
}
],
"tags": [
"tag1",
"tag2",
"tag3"
]
}
]
Run Code Online (Sandbox Code Playgroud)
预期输出:
{"tag":"tag1", …Run Code Online (Sandbox Code Playgroud) 对于在美国发行且matos.viewer. rating 大于或等于3 的电影,计算一个名为num_favs 的新字段,该字段表示电影的演员字段中出现的最爱数量。
我不知道如何进一步进行,你能帮忙吗
favorites =
["Sandra Bullock",
"Tom Hanks",
"Julia Roberts",
"Kevin Spacey",
"George Clooney"]
db.movies.aggregate([
{ $match:{
'tomatoes.viewer.rating':{$gte:3},
"countries":"USA"
}
}
]).
Run Code Online (Sandbox Code Playgroud) 这已经困扰了我一段时间了.MongoDB 的聚合框架是一个很好的工具,通常比.mapReduce()大多数情况更适合使用,除非后者实际上更适合.
当然,与JavaScript解释相比,它实际上使用本机C++编译中实现的方法来执行它的操作,因此在大多数情况下比mapReduce替代方案"更快".
但这里的主要问题是"结果中'反转'关键顺序的含义是什么?".至少在最后几个主要版本的情况下,如果情况并非总是这样(不是真的在这里测试每个版本,在写作时只考虑2.6.x和3.x候选版本).但它始终处于"反向"状态,这看起来非常直观,因为我将在一个例子中给出.
将基本集合视为一个简单的例子:
db.example.insert([
{ "field": "A", "value": 1 },
{ "field": "A", "value": 2 },
{ "field": "B", "value": 3 },
{ "field": "B", "value": 4 },
{ "field": "C", "value": 5 },
{ "field": "C", "value": 6 }
])
Run Code Online (Sandbox Code Playgroud)
一旦该集合到位,当您想要运行如下样本聚合操作时:
db.example.aggregate([
{ "$group": {
"_id": "$field",
"value": { "$sum": "$value" }
}}
])
Run Code Online (Sandbox Code Playgroud)
然后返回的结果总是会像这样神秘地返回:
[
{ "_id" : "C", "value" : 11 },
{ "_id" : "B", "value" : 7 },
{ …Run Code Online (Sandbox Code Playgroud) mongodb ×7
java ×1
javascript ×1
json ×1
mapreduce ×1
mongodb-java ×1
mongoose ×1
spring-mongo ×1