我有一个问题:
db.test.aggregate( {$group : { _id : '$key', frequency: { $sum : 1 } } } )
Run Code Online (Sandbox Code Playgroud)
这将获得测试集中每个密钥枚举的频率.基本上,我已经得到了密钥的分配.
现在想象一下我想获得key1,key2和key3的分布(因此有三种不同的分布).
显然,我可以使用每个单独的键运行此查询3次,但似乎我们可以通过允许它同时计算所有3个键来优化查询.我一直在玩它并搜索整个网络间,但到目前为止,我已经被委托运行三个单独的聚合查询或使用map/reduce函数.
有没有人有任何其他想法?
我尝试在我的Node程序中使用mongodb的聚合方法时出现类型错误.我使用节点0.10.16版本和mongodb mongodb-win32-x86_64-2.4.2版本.
以下是我在mongodb中的'关系'表的详细信息 - `
db.relation.find().的forEach(printjson)
{ "_id" : ObjectId("518808811189128048034c7b") }
{
"username" : "51880fa37901642c36000001",
"selectedoption" : "RCB",
"question" : "Which team is going to win IPL6?",
"_id" : ObjectId("5188137dee3a599c34000001")
}
{
"username" : "51880fa37901642c36000001",
"selectedoption" : "Mumbai",
"question" : "Which team is going to win IPL6?",
"_id" : ObjectId("518c2bd0afa8d2e82b000001")
}
{
"username" : "51880fa37901642c36000001",
"selectedoption" : "Mumbai",
"question" : "Which team is going to win IPL6?",
"_id" : ObjectId("518c2c81681aae0838000001")
}
{
"username" : "51880fa37901642c36000001",
"selectedoption" : "RCB",
"question" : …Run Code Online (Sandbox Code Playgroud) 我正在对mongo 2.4.9集合进行一些聚合,但是我无法通过两个字段对结果进行排序.这是我使用PyMongo进行的查询:
result = mongo_coll.aggregate([{"$match": {"_cls": "class1"},
{"$group": {"_id": {"currency": "$total.currency",
"v_id": "$v_id"},
"total": {"$sum": "$total.amount"},
"count": {"$sum": 1}}},
{"$sort": {"_id.currency": 1, "total": -1}}])
Run Code Online (Sandbox Code Playgroud)
我的结果按"总计"排序: - 1
如果我用以下内容替换最后一行:
{"$sort": {"total": -1, "_id.currency": 1}}])
Run Code Online (Sandbox Code Playgroud)
它仍按"总计"排序: - 1
如果我用以下内容替换它:
{"$sort": {"_id.currency": 1}}])
Run Code Online (Sandbox Code Playgroud)
它按货币排序.
但我无法按照我想要的方式对其进行排序,这意味着首先是货币,然后是总数......(其他结果看起来很好,正如预期的那样).有人有线索吗?
最好的,并提前感谢!
更新:这是一个示例文档:
{
"_id": { "$oid" : "533d0a3b830f783478a75aa1" },
"_cls": "class1",
"v_id": 6813,
"total": {
"amount": 680,
"currency": "EUR",
"exp": -2
}
}
Run Code Online (Sandbox Code Playgroud) db.test.aggregate({
$match : { "themType" : "SuperTest" , "mType" : { "$in" : [ 1 , 2]}}
},
{ $project : { "_id" : 1, "refTestId" : 1, "avatar" : { $concat : [$refTestId] }
} });
Run Code Online (Sandbox Code Playgroud)
和avatar返回null,可能是因为它的objectId,是否可以在此查询中使用此objectId字符串?
有谁知道我们在mongodb shell中为golang mgo/bson使用的聚合命令的等价物是什么?
像这样的东西:
aggregate([{$match:{my_id:ObjectId("543d171c5b2c1242fe0019")}},{$sort:{my_id:1, dateInfo:1, name:1}},{$group:{_id:"$my_id", lastEntry:{$max: "$dateInfo"},nm:{$last:"$name"}}}])
Run Code Online (Sandbox Code Playgroud) 这就是我的文档的样子
{
code: "A2df",
clicks: 7,
countries: [{"country":"IN", clicks:5},{"country":"US", clicks:2}],
domains: [{"domain":"a.com", clicks:4},{"country":"b.com", clicks:3}]
},
{
code: "B3ws",
clicks: 11,
countries: [{"country":"IN", clicks:6},{"country":"ND", clicks:5}],
domains: [{"domain":"a.com", clicks:7},{"country":"c.com", clicks:4}]
},
{
code: "A2df",
clicks: 5,
countries: [{"country":"IN", clicks:2},{"country":"ND", clicks:3}],
domains: [{"domain":"a.com", clicks:1},{"country":"c.com", clicks:4}]
}...
Run Code Online (Sandbox Code Playgroud)
这就是我需要的:
{
code: "A2df",
clicks: 12,
countries: [
{
"country": "IN",
clicks: 7
},
{
"country": "US",
clicks: 2
},
{
"country": "ND",
clicks: 3
}
],
domains: [
{
"domain": "a.com",
clicks: 5
},
{
"country": …Run Code Online (Sandbox Code Playgroud) 我在ubuntu机器上使用mongo v3.0.1.我收集了3亿行.我已根据查询首选项创建了两个索引.
当我尝试使用explain进行聚合时,它会使用效率低下的索引,这就是为什么它需要花费20-25秒的时间.有没有办法放置$hint,以便我的聚合查询使用适当的索引.
$match是我的第一个管道阶段.我有两个索引:
"HOST_-1_SiteType_-1"
"VisitTime_-1_AccountId_-1_Host_-1_SiteType_-1_Extension_-1_LifeTime_-1"
我的$match管道就像:
{ "$match" : {
"AccountId": accID,
"VisitTime": { "$lte" : today, "$gte" : last365Days },
"$or": [
{ "$and": [
{ "Extension":{ "$in": ["chrome_0","firefox_0"] }},
{ "LifeTime": 0 }
]},
{ "LifeTime": { "$gt": 1000 }}
],
"Host": { "$ne": "localhost" },
"SiteType" : { "$exists": true },
}
Run Code Online (Sandbox Code Playgroud)
它使用的是第一个索引,而不是第二个索引.以及第一个指数在50秒内所花费的时间,而使用第二个指数只需要18秒.
这是我的一个文档示例:
{
"_id" : "2bc1143c-07e4-4c37-a020-a7485b2802a3",
"CreatedDate" : ISODate("2015-07-22T04:05:06.802+0000"),
"UpdatedDate" : ISODate("2015-07-22T05:28:26.469+0000"),
"AccountId" : accID,
"Url" : "http://www.test.com/test.html",
"Host" …Run Code Online (Sandbox Code Playgroud) 我在一个名为诊断的集合中有这样的文档:
{
"_id" : ObjectId("582d43d18ec3f432f3260682"),
"patientid" : ObjectId("582aacff3894c3afd7ad4677"),
"doctorid" : ObjectId("582a80c93894c3afd7ad4675"),
"medicalcondition" : "high fever, cough, runny nose.",
"diagnosis" : "Viral Flu",
"addmissiondate" : "2016-01-12",
"dischargedate" : "2016-01-16",
"bhtno" : "125",
"prescription" : [
{
"drug" : ObjectId("58345e0e996d340bd8126149"),
"instructions" : "Take 2 daily, after meals."
},
{
"drug" : ObjectId("5836bc0b291918eb42966320"),
"instructions" : "Take 1 daily, after meals."
}
]
}
Run Code Online (Sandbox Code Playgroud)
处方对象数组中的药物 ID来自一个名为drug的单独集合,请参阅下面的示例文档:
{
"_id" : ObjectId("58345e0e996d340bd8126149"),
"genericname" : "Paracetamol Tab 500mg",
"type" : "X",
"isbrand" …Run Code Online (Sandbox Code Playgroud) 这是我的NetworkInfo集合的示例文档。
{
"_id" : ObjectId("5a37595bd2d9ce37f86d612e"),
"edgeList" : [
{
"networkSource" : {
"sourceId" : "pump1"
},
"networkRelationship" : {},
"networkTarget" : {
"targetId" : "chiller1",
"parentId" : "pump1"
}
},
{
"networkSource" : {
"sourceId" : "chiller1"
},
"networkRelationship" : {},
"networkTarget" : {
"targetId" : "secondaryPump1",
"parentId" : "chiller1"
}
},
{
"networkSource" : {
"sourceId" : "secondaryPump1"
},
"networkRelationship" : {},
"networkTarget" : {
"targetId" : "ahu1",
"parentId" : "secondaryPump1"
}
}
]
Run Code Online (Sandbox Code Playgroud)
}
我尝试使用以下代码为上述文档创建图形查找:
泵1->冷却器1->次级泵1-> ahu1
db.getCollection("NetworkInfo").aggregate([ …Run Code Online (Sandbox Code Playgroud) 我是Mongo Db的新手,非常感谢您对此查询的一些帮助.在过去的几天里,我一直在筛选这些帖子,撕扯我的头发,看看我是否能找到与我的查询相关但没有运气的任何内容.
我有一个集合,文档结构类似于下面:
_id: xyz
Movieid: 123
MovieName: Titanic
ReleaseDate: 2000-01-01
_id: uvw
Movieid: 456
MovieName: Titanic II
ReleaseDate: 2018-01-01
_id: pqr
Movieid: 789
MovieName: Titanic III
ReleaseDate:
Run Code Online (Sandbox Code Playgroud)
我希望在3个单独的列中实现输出作为总电影,具有发布日期的电影和没有发布日期的电影的计数,如下所示:
Total | Released | UnReleased
3 | 2 | 1
Run Code Online (Sandbox Code Playgroud)
我能够编写单独的查询来执行计数,但我无法将所有这些成功整合到单个查询中.最终目标是创建一个视图,将这些计数作为输出.我已经尝试使用$和等运算符,但似乎无法使查询按预期工作....这是我得到的:
db.getCollection("Movies").aggregate(
$and: [
{
"$match" :
{"ReleaseDate":{$exists:true}}
}
,
{
$count:"Total"
},
{
"$match" :
{"ReleaseDate":{$exists:true,$nin:[""]}}
}
,
{
$count:"Released"
},
{
"$match" :
{"ReleaseDate":{$exists:true,$in:[""]}}
}
,
{
$count:"Unreleased"
}
]
);
Run Code Online (Sandbox Code Playgroud)