我首先尝试按日期排序数据,然后在另一个字段上分组.这对我不起作用.
我想回答的问题是:选择最新的不同cid?
鉴于此数据:
db.summary.save({"lid" : 5, "date" : 5, "cid" : 2, "circles" : [ 2 ] })
db.summary.save({"lid" : 2, "date" : 2, "cid" : 1, "circles" : [ 2 ] })
db.summary.save({"lid" : 4, "date" : 0, "cid" : 3, "circles" : [ 2 ] })
db.summary.save({"lid" : 3, "date" : 3, "cid" : 2, "circles" : [ 2 ] })
db.summary.save({"lid" : 1, "date" : 1, "cid" : 1, "circles" : [ 2 ] })
db.summary.aggregate( {$match …Run Code Online (Sandbox Code Playgroud) 我正在使用mongoose在nodejs + mongodb项目上工作.现在我遇到了一个我不知道答案的问题.我正在使用聚合框架来获得分组结果.分组在不包括时间数据字段的日期完成,如:"2013 02 06".代码如下所示:
MyModel.aggregate([
{$match: {$and: [{created_date: {$gte: start_date}}, {created_date: {$lte: end_date}}]}},
{$group: {
_id: {
year: {$year: "$created_at"},
month: {$month: "$created_at"},
day: {$dayOfMonth: "$created_at"}
},
count: {$sum: 1}
}},
{$project: {
date: {
year: "$_id.year",
month:"$_id.month",
day:"$_id.day"
},
count: 1,
_id: 0
}}
], callback);
Run Code Online (Sandbox Code Playgroud)
分组结果是完美的,除了它们没有排序.以下是输出示例:
[
{
count: 1,
date: {
year: 2013,
month: 2,
day: 7
}
},
{
count: 1906,
date: {
year: 2013,
month: 2,
day: 4
}
},
{
count: 1580,
date: …Run Code Online (Sandbox Code Playgroud) 文档存储有以下字段:
_id:
NumberofChildren: Integer
OwnsAHome: Boolean
Income: Integer
Run Code Online (Sandbox Code Playgroud)
我需要使用聚合框架按子节点数排序,所以输出是这样的:
Number of Children: 3
Number of People: some value, say 17
Number of People who own a home: some value less than 17 which is a sum of the number of true Booleans
Average income: some value
Run Code Online (Sandbox Code Playgroud)
我会怎么做这与聚集的MongoDB,特别是关于计数的次数多少Boolean OwnsAHome,是true?
谢谢!
我正在尝试按时间戳分组名为"foo"的集合{_id,TimeStamp}
db.foos.aggregate(
[
{$group : { _id : new Date (Date.UTC({ $year : '$TimeStamp' },{ $month : '$TimeStamp' },{$dayOfMonth : '$TimeStamp'})) }}
])
Run Code Online (Sandbox Code Playgroud)
期待许多日期,但结果只是一个日期.我正在使用的数据是正确的(除了1970年以外有很多foo和不同的日期).解析日期有一些问题,但我还无法解决.
{
"result" : [
{
"_id" : ISODate("1970-01-01T00:00:00.000Z")
}
],
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
试过这一个:
db.foos.aggregate(
[
{$group : { _id : { year : { $year : '$TimeStamp' }, month : { $month : '$TimeStamp' }, day : {$dayOfMonth : '$TimeStamp'} }, count : { $sum : 1 } }},
{$project : { parsedDate : …Run Code Online (Sandbox Code Playgroud) 什么是MySQL查询的mongodb等价物
SELECT username AS `consname` FROM `consumer`
Run Code Online (Sandbox Code Playgroud) 我对mongodb的聚合函数感到困惑.我想要的就是在我的收藏中找到最新的文档.假设每个记录都有一个"已创建"的字段
db.collection.aggregate({
$group: {
_id:0,
'id':{$first:"$_id"},
'max':{$max:"$created"}
}
})
Run Code Online (Sandbox Code Playgroud)
产生正确的结果,但我希望结果中的整个文档?我该怎么办?
这是文档的结构:
{
"_id" : ObjectId("52310da847cf343c8c000093"),
"created" : 1389073358,
"image" : ObjectId("52cb93dd47cf348786d63af2"),
"images" : [
ObjectId("52cb93dd47cf348786d63af2"),
ObjectId("52f67c8447cf343509d63af2")
],
"organization" : ObjectId("522949d347cf3402c3000001"),
"published" : 1392601521,
"status" : "PUBLISHED",
"tags" : [ ],
"updated" : 1392601521,
"user_id" : ObjectId("52214ce847cf344902000000")
}
Run Code Online (Sandbox Code Playgroud) 我想投影一个集合,仅当字段在范围内时才应用导出值.
有点:
db.workouts.aggregate({
$match: { user_id: ObjectId(".....") }
},
{
$project: {
'20': { $cond: [ {$gt: [ "$avg_intensity", 20]} , '$total_volume', 0] }
}
})
Run Code Online (Sandbox Code Playgroud)
只有当avg_intensity在某个范围内时我才需要获取值.然后,我将对投影结果进行分组和总结.
我想要做的是应用$ gt和$ lt过滤器,但没有太大的成功.
db.workouts.aggregate(
{
$match: { user_id: ObjectId("....") }
},
{
$project: {
'20': { $cond: [ [{$gt: [ "$avg_intensity", 20]}, {$lt: [ "$avg_intensity", 25]}] , '$total_volume', 0] }
}
})
Run Code Online (Sandbox Code Playgroud)
我如何应用$ gt和$ lt条件?
专家们.
我是MongoDB的新手,但我知道自己遇到了麻烦......例如:
db.test.aggregate(
[
{$group: {_id: {email: "$email", gender: "$gender"}, cnt: {$sum: 1}}},
{$group: {_id: "$_id.email", cnt: {$sum: 1}}},
{$match: {cnt: 2}}
],
{allowDiskUse : true}
)
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么变化,我都会遇到同样的错误("Pass allowDiskUse:true to opt in"):
错误("打印堆栈跟踪")@:0()@src/mongo/shell/utils.js:37([对象数组],[对象对象])@src/mongo/shell/collection.js:866 @(壳):7
未捕获的异常:聚合失败:{"errmsg":"异常:来自mongo1.mscnet.com:27017的响应中收到错误:{$ err:\"超出$ group的内存限制,但不允许外部排序.传递allowDiskUse:true以选择加入. \",代码:16945}","code":16945,"ok":0}
仅供参考:我使用的是Mongo 2.6
我试图将十六进制字符串转换为聚合查询中的等效ObjectID.我尝试了两种不同的方法:
db.omvas.aggregate([
{$project:{
EID:{$let: {
vars: {
id: "$EID"
},
in: ObjectId("$$id")
}},
}
},
{$group:{
_id:"$EID"
}
}
]);
Run Code Online (Sandbox Code Playgroud)
和
db.omvas.aggregate([
{$project:{
EID: ObjectId("$EID")
}
},
{$group:{
_id:"$EID"
}
}
]);
Run Code Online (Sandbox Code Playgroud)
我继续使用任一方法获得错误"错误:无效对象id:长度".我测试了添加一个文字字符串来代替聚合变量,我得到一个带有正确ObjectID的结果.似乎字符串值没有传递给Mongo的ObjectId函数,而是将变量名称作为文字字符串传递.
任何人都知道我想要完成的任务是否可行?我有什么魔法吗?
我是新手.但我尝试学习编写查询的最合理方法.
假设我收集的是;
{
"id" : NumberInt(1),
"school" : [
{
"name" : "george",
"code" : "01"
},
{
"name" : "michelangelo",
"code" : "01"
}
],
"enrolledStudents" : [
{
"userName" : "elisabeth",
"code" : NumberInt(21)
}
]
}
{
"id" : NumberInt(2),
"school" : [
{
"name" : "leonarda da vinci",
"code" : "01"
}
],
"enrolledStudents" : [
{
"userName" : "michelangelo",
"code" : NumberInt(25)
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想列出一个key带有相应code值的a的出现.
举个例子key:michelangelo
为了找到密钥的出现,我写了两个不同的 …