在聚合框架示例中,有第一个和最后一个示例:
db.zipcodes.aggregate( { $group:
{ _id: { state: "$state", city: "$city" },
pop: { $sum: "$pop" } } },
{ $sort: { pop: 1 } },
{ $group:
{ _id : "$_id.state",
biggestCity: { $last: "$_id.city" },
biggestPop: { $last: "$pop" },
smallestCity: { $first: "$_id.city" },
smallestPop: { $first: "$pop" } } }
Run Code Online (Sandbox Code Playgroud)
我可以获得完整的zipcodes文档$first吗?
编辑:
为了澄清,我在我的快递应用程序中使用coffeescript执行以下操作,看起来很愚蠢:
@aggregate(
{
$group :
_id : "$category"
cnt : { $sum : 1 }
id: {$first: "$_id"}
name: {$first: …Run Code Online (Sandbox Code Playgroud) MongoDB中提供了大量的" Date Aggregation Operators",如$dayOfYear,$dayOf Month和$millisecond.该$millisecond函数只返回时间戳的毫秒数,范围为0-999.
Date从聚合管道中的纪元开始,有没有办法以毫秒为单位访问对象?
谢谢,
弥敦道
我有一个带有以下文件的物品集合.
{ "item" : "i1", "category" : "c1", "brand" : "b1" }
{ "item" : "i2", "category" : "c2", "brand" : "b1" }
{ "item" : "i3", "category" : "c1", "brand" : "b2" }
{ "item" : "i4", "category" : "c2", "brand" : "b1" }
{ "item" : "i5", "category" : "c1", "brand" : "b2" }
Run Code Online (Sandbox Code Playgroud)
我想分开汇总结果 - >按类别计算,按品牌计算.请注意,不计入(类别,品牌)
我可以使用map-reduce使用以下代码执行此操作.
map = function(){
emit({type:"category",category:this.category},1);
emit({type:"brand",brand:this.brand},1);
}
reduce = function(key, values){
return Array.sum(values)
}
db.item.mapReduce(map,reduce,{out:{inline:1}})
Run Code Online (Sandbox Code Playgroud)
结果是
{
"results" : [
{ …Run Code Online (Sandbox Code Playgroud) 我正在使用mongodb聚合来聚合数据集.我的情况有点复杂.我有一个如下集合:
{
startTime: ISODate("2014-12-31T10:20:30Z"),
customerId: 123,
ping: "2",
link: "3"
}
Run Code Online (Sandbox Code Playgroud)
现在我想将数据聚合到另一个集合,如下所示:
{
_id: {
day: ISODate("2014-12-31T00:00:00Z"),
customerId: 123
},
hours: [
{
hour: ISODate("2014-12-31T10:00:00Z"),
pings: 2,
links: 3
},
{
hour: ISODate("2014-12-31T11:00:00Z"),
pings: 5,
links: 6
}
]
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,数据首先是按天分组,然后是按小时分组.我有以下聚合查询按天分组,但是如何按小时将它们分组?任何的想法?
var pipeline = [
{
$project : {
startTime : 1,
customerId: 1,
ping:1,
link:1,
date : "$startTime",
h : {
"$hour" : "$startTime"
},
m : {
"$minute" : "$startTime"
},
s : {
"$second" : "$startTime"
}, …Run Code Online (Sandbox Code Playgroud) 文件样本:
{
"_id" : ObjectId("53329dfgg43771e49538b4567"),
"u" : {
"_id" : ObjectId("532a435gs4c771edb168c1bd7"),
"n" : "Salman khan",
"e" : "salman@gmail.com"
},
"ps" : 0,
"os" : 1,
"rs" : 0,
"cd" : 1395685800,
"ud" : 0
}
Run Code Online (Sandbox Code Playgroud)
查询:
db.collectiontmp.aggregate([
{$match: {os:1}},
{$project : { name:{$toUpper:"$u.e"} , _id:0 } },
{$group: { _id: "$u._id",total: {$sum:1} }},
{$sort: {total: -1}}, { $limit: 10 }
]);
Run Code Online (Sandbox Code Playgroud)
我需要从上面的查询中得到以下内容:
u._id返回记录中的记录和电子邮件总数,如下所示:
{"result":[{"email":"","total":""},{"email":"","total":""}},"ok":1}
我需要转换这样的字段:
{
"_id" : ObjectId("576fd6e87d33ed2f37a6d526"),
"phoneme" : "JH OY1 N Z"
}
Run Code Online (Sandbox Code Playgroud)
进入像这样的子串数组
{
"_id" : ObjectId("576fd6e87d33ed2f37a6d526"),
"phonemes" : [ "JH", "OY1", "N", "Z" ]
}
Run Code Online (Sandbox Code Playgroud)
有时会变成像这样的字符数组
{
"_id" : ObjectId("576fd6e87d33ed2f37a6d526"),
"phonemes" : ["J", "H", " ", "O", "Y", "1", " ", "N", " ", "Z"]
}
Run Code Online (Sandbox Code Playgroud)
我在这里发现了一些将字符串转换为数组的代码,但是对于我的目的来说有点太简单了,因为只创建了一个数组元素.
db.members.find().snapshot().forEach( function (x) {
x.photos = [{"uri": "/images/" + x.photos}];
db.members.save(x);
});
Run Code Online (Sandbox Code Playgroud)
我是否可以在mongo shell语句中使用整个javascript语言?
我有一个高度嵌套的mongoDB对象集,我想计算匹配给定条件Edit的子文档数:(在每个文档中).例如:
{"_id":{"chr":"20","pos":"14371","ref":"A","alt":"G"},
"studies":[
{
"study_id":"Study1",
"samples":[
{
"sample_id":"NA00001",
"formatdata":[
{"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
]
},
{
"sample_id":"NA00002",
"formatdata":[
{"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
]
}
]
}
]
}
{"_id":{"chr":"20","pos":"14372","ref":"T","alt":"AA"},
"studies":[
{
"study_id":"Study3",
"samples":[
{
"sample_id":"SAMPLE1",
"formatdata":[
{"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
]
},
{
"sample_id":"SAMPLE2",
"formatdata":[
{"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
]
}
]
}
]
}
{"_id":{"chr":"20","pos":"14373","ref":"C","alt":"A"},
"studies":[
{
"study_id":"Study3",
"samples":[
{
"sample_id":"SAMPLE3",
"formatdata":[
{"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
]
},
{
"sample_id":"SAMPLE7",
"formatdata":[
{"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
]
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想知道有多少子文档包含GT:"1 | 0",在这种情况下,在第一个文档中为1,在第二个文档中为2,在第3个文档中为0.我已经尝试了展开和聚合函数,但我显然没有做正确的事情.当我尝试通过"GT"字段计算子文档时,mongo抱怨:
db.collection.aggregate([{$group: {"$studies.samples.formatdata.GT":1,_id:0}}])
Run Code Online (Sandbox Code Playgroud)
因为我的小组的名字不能包含".",但如果我把它们留下:
db.collection.aggregate([{$group: {"$GT":1,_id:0}}])
Run Code Online (Sandbox Code Playgroud)
它抱怨因为"$ GT不能是运营商名称"
有任何想法吗?
我有一个包含以下数据的集合:
{
"_id" : ObjectId("5516d416d0c2323619ddbca8"),
"date" : "28/02/2015",
"driver" : "user1",
"passengers" : [
{
"user" : "user2",
"times" : 2
},
{
"user" : "user3",
"times" : 3
}
]
}
{
"_id" : ObjectId("5516d517d0c2323619ddbca9"),
"date" : "27/02/2015",
"driver" : "user2",
"passengers" : [
{
"user" : "user1",
"times" : 2
},
{
"user" : "user3",
"times" : 2
}
]
}
Run Code Online (Sandbox Code Playgroud)
并且我想执行聚合以便我知道某个乘客,与某个驱动程序相关的时间,在我的示例中它将是:对于user1:[{ driver: user2, times: 2}]
对于user2:[{ driver: user1, times: 2}]
对于user3:[{ driver: user1, times: …
我有一个包含许多对象的json数据.我想限制分页数据,我需要总项数.请帮忙.
Model.find().skip((pageNumber-1)*limit).limit(limit).exec()
Run Code Online (Sandbox Code Playgroud)
我想要计数和跳过数据作为回应.
我正在创建一个MongoDB聚合管道,我在这个阶段陷入困境:
$group: {
_id: {checkType: "$_id.checkType", resultCode: "$_id.resultCode"},
count: { $sum: "$count" },
ctv: { $sum: "$ctv" },
perc:{$multiply:[{$divide:["$ctv","$count"]},100]},
weight: { $divide: [ "$ctv", "$count"] },
details: { $push: "$$ROOT" }
}
Run Code Online (Sandbox Code Playgroud)
它给出错误"$ multiply accumulator是一元运算符".类似地,如果我用$ multiply删除该行,则在后续行中得到"$ divide accumulator是一元运算符".我在网上找不到这个错误的描述.我的sintax有什么问题?