样本文件:
{
_id: ObjectId('4f442120eb03305789000000'),
time: ISODate("2013-10-10T20:55:36Z"),
value:1
},
{
_id: ObjectId('4f442120eb03305789000001'),
time: ISODate("2013-10-10T28:43:16Z"),
value:2
},
{
_id: ObjectId('4f442120eb03305789000002'),
time: ISODate("2013-10-11T27:12:66Z"),
value:3
},
{
_id: ObjectId('4f442120eb03305789000003'),
time: ISODate("2013-10-11T10:15:38Z"),
value:4
},
{
_id: ObjectId('4f442120eb03305789000004'),
time: ISODate("2013-10-12T26:15:38Z"),
value:5
}
Run Code Online (Sandbox Code Playgroud)
可以轻松获得按日期分组的聚合结果.但我想要的是查询返回聚合的运行总计的结果,如:
{
time: "2013-10-10"
total: 3,
runningTotal: 3
},
{
time: "2013-10-11"
total: 7,
runningTotal: 10
},
{
time: "2013-10-12"
total: 5,
runningTotal: 15
}
Run Code Online (Sandbox Code Playgroud)
这可能与MongoDB聚合有关吗?
在我的收藏中,每个文档都有2个日期,修改和同步.我想找到那些修改>同步或同步不存在的那些.
我试过了
{'modified': { $gt : 'sync' }}
Run Code Online (Sandbox Code Playgroud)
但它没有表现出我的预期.有任何想法吗?
谢谢
datetime mongodb node.js mongodb-query aggregation-framework
MongoDb的$ project聚合运算符是否可以将文档重组为数组?
这是我到目前为止所做的:
var pipeline = [];
var project = {
$project : {
x: "$_id",
y: "$y" ,
_id : 0
}
};
pipeline.push(project);
model.aggregate( pipeline, callback);
Run Code Online (Sandbox Code Playgroud)
这给了我输出的形式:
[
{
x: '...',
y: '...'
}
....
]
Run Code Online (Sandbox Code Playgroud)
我想拥有:
[
['..','..']
....
]
Run Code Online (Sandbox Code Playgroud)
我可以通过迭代来轻松地重构输出,但是真的很想知道聚合本身是否可以返回数组而不是对象.
我有一个文档设置如下:
{
_id : ObjectId(),
info : [
[
1399583281000,
20.13
],
[
1399583282000,
20.13
],
[
1399583283000,
20.13
],
[
1399583285000,
20.13
],
[
1399583286000,
20.13
]
]
}
Run Code Online (Sandbox Code Playgroud)
这些数据可以分布在多个文档中.通常,每个文档包含59个周期(秒)的信息中的数据.
我想要做的是获取时间戳大于特定时间的所有信息数据.
有什么想法我会这样做吗?
谢谢
编辑:
所以,我发现这似乎返回了所有文件:
db.infos.find({
info:{
$elemMatch:{
0:{
$gt:1399583306000
}
}
}
})
Run Code Online (Sandbox Code Playgroud)
但也许我需要在聚合查询中使用它?这样它只会返回所有值?
我Objects在mongo集合中有以下两个名为cars:
{vendor: "BMW",
model: "325i",
class: "coupe",
equipment: [
{name: "airbag",
cost: 120
},
{name: "led",
cost: 170
},
{name: "abs",
cost: 150
}
]
}
{vendor: "Mercedes",
model: "C 250",
class: "coupe",
equipment: [
{name: "airbag",
cost: 180
},
{name: "esp",
cost: 170
},
{name: "led",
cost: 120
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在玩Mongo 2.6中引入的新聚合功能redact我想执行查询以获取带有过滤设备部件的汽车列表.用语言:给我所有类型的轿跑车,只有关于LED和AIRBAG设备的信息.
我试过这个聚合:
db.cars.aggregate(
[
{$match: {"class": "coupe"}},
{$redact:
{
$cond:
{
if: { $in : ["$name", ["airbag", …Run Code Online (Sandbox Code Playgroud) 我正在使用mongodb的c#驱动程序,并希望对我正在创建的Web API使用聚合查询.对于我的聚合查询,我关注的是具有用户名,日期和步骤的配置文件类.我想创建一个查询,选择用户名并获取给定周的总步数,按总步数降序排列.我只想显示他们的用户名和他们的总步数.
当我尝试聚合查询时,我遇到了一些问题,我的某些字段将显示为null.所以,我认为我的查询结构不正确.
我有一个"配置文件"类,我目前用于我的数据.
[BsonIgnoreExtraElements]
[DataContract]
public class Profile
{
[DataMember]
public string Username { get; set; }
[DataMember]
public DateTime Date { get; set; }
[DataMember]
public uint? Steps { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我使用以下方法创建了一些测试数据,例如配置文件
//Test data
for (uint index = 1; index < 20; index++)
{
Profile aprofile = new Profile
{
Username = string.Format("testuser{0}", index),
Date = RandomDay(),
Steps = (index + index + index)*2
};
AddProfile(aprofile);
}
Run Code Online (Sandbox Code Playgroud)
如果我运行代码几次并查询特定用户,我得到的数据如下:
[{"Username":"testuser1","Date":"2014-07-03T00:00:00Z","Steps":6},
{"Username":"testuser1","Date":"2014-07-07T05:00:00Z","Steps":6},
{"Username":"testuser1","Date":"2014-07-17T05:00:00Z","Steps":6},
{"Username":"testuser1","Date":"2014-07-18T05:00:00Z","Steps":6}]
Run Code Online (Sandbox Code Playgroud)
然后,我有几个静态方法来查找我的聚合查询的最早日期和最新日期.
//gets a datetime …Run Code Online (Sandbox Code Playgroud) 我可以获得该网站的所有统计数据,aggregation但我想为某个用户提供,例如$where.
所有统计数据:
games.aggregate([{
$group: {
_id: '$id',
game_total: { $sum: '$game_amount'},
game_total_profit: { $sum: '$game_profit'}}
}]).exec(function ( e, d ) {
console.log( d )
})
Run Code Online (Sandbox Code Playgroud)
当我尝试使用$match运算符时,我收到错误:
games.aggregate([{
$match: { '$game_user_id' : '12345789' },
$group: {
_id: '$id',
game_total: { $sum: '$game_amount'},
game_total_profit: { $sum: '$game_profit'}}
}]).exec(function ( e, d ) {
console.log( d )
})
Arguments must be aggregate pipeline operators
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
javascript mongodb node.js mongodb-query aggregation-framework
我正在尝试对一组文档进行分组,并根据它们的值来计算它们.例如
{ "_id" : 1, "item" : "abc1", "value" : "1" }
{ "_id" : 2, "item" : "abc1", "value" : "1" }
{ "_id" : 3, "item" : "abc1", "value" : "11" }
{ "_id" : 4, "item" : "abc1", "value" : "12" }
{ "_id" : 5, "item" : "xyz1", "value" : "2" }
Run Code Online (Sandbox Code Playgroud)
在这里,我想按"项目"进行分组,并获得一个计数"数值"大于10的次数和小的次数.所以:
{ "item": "abc1", "countSmaller": 2, "countBigger": 1}
{ "item": "xyz1", "countSmaller": 1, "countBigger": 0}
Run Code Online (Sandbox Code Playgroud)
使用$ aggregate可以很容易地实现普通计数,但是如何实现上述结果呢?
以下是MongoDB教程中的一个示例(此处为收集邮政编码db:
db.zipcodes.aggregate( [
{ $group: { _id: "$state", totalPop: { $sum: "$pop" } } },
{ $match: { totalPop: { $gte: 10*1000*1000 } } }
] )
Run Code Online (Sandbox Code Playgroud)
如果我_id用其他类似的东西替换Test,我会得到错误信息:
"errmsg" : "exception: the group aggregate field 'Test' must be defined as an expression inside an object",
"code" : 15951,
"ok" : 0
Run Code Online (Sandbox Code Playgroud)
有人能帮我理解为什么_id我的命令需要吗?我认为MongoDB会自动分配ID,如果使用不提供ID.
现在,在$ filter数组聚合运算符中不可能使用$ in运算符.
假设这是文档架构:
{
_id: 1,
users: [
{
_id: 'a',
accounts: ['x', 'y', 'z']
},
{
_id: 'b',
accounts: ['j','k','l']
}
]
}
Run Code Online (Sandbox Code Playgroud)
我希望,使用aggregate,users根据数组的内容获取带有过滤数组的文档accounts.
如果在$in将与合作$filter运营商,我希望它看起来像这样:
db.test.aggregate([
{
$project: {
'filtered_users': {
$filter: {
input: '$users',
as: 'user',
cond: {
$in: ['$$user.accounts', ['x']]
}
}
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
和返回的filtered_users只有第一个用户,因为X是在他的账户.
但是,正如我所说,这不起作用,我得到错误:
"无效的运营商'$ in'"
因为$filter运营商不支持它.
现在我知道我可以$unwind …