我有一个模式集合(猫鼬)说:
{
name : String,
age : Number,
params : [Number] // e.g. : params = [1,21,45,32,0] , usually they are very small arrays
}
Run Code Online (Sandbox Code Playgroud)
该集合有1000多种此类文件
说,我有一个 baseParams = [1,20,30,4,7];
我想使用聚合并找到其参数包含baseParams数组中大多数数字的文档的id,如max(对于每个doc交集(baseParams,params))
我终于需要按年龄排序的前5个文件的_id:1
任何人的想法?
我有一系列事件,其结构如下:
{
"_id" : ObjectId("537b3ff288f4ca2f471afcae"),
"Name" : "PREMISES MAP DELETED",
"ScreenName" : "AccessPointActivity",
"Timestamp" : NumberLong("1392113758000"),
"EventParams" : "null",
"TracInfo" : {
"ApplicationId" : "fa41f204bfc711e3b9f9c8cbb8c502c4",
"DeviceId" : "2_1VafJVPu4yfdbMWO1XGROjK6iQZhq4hAVCQL837W",
"UserId" : "pawan",
"SessionId" : "a8UHE16mowNwNGyuLXbW",
"WiFiAP" : "null",
"WiFiStrength" : 0,
"BluetoothID" : "null",
"BluetoothStrength" : 0,
"NetworkType" : "null",
"NetworkSubType" : "null",
"NetworkCarrier" : "Idea",
"Age" : 43,
"Gender" : "Female",
"OSVersion" : "16",
"Manufacturer" : "samsung",
"Resolution" : "600*976",
"Platform" : "Android",
"Latitude" : 40.42,
"Longitude" : -74,
"City" …Run Code Online (Sandbox Code Playgroud) 我需要通过分组对象的集合masterID或id如果masterID不存在.在具有相同属性的一组对象中,masterID我需要找到具有最高pos属性($max: "$pos")的对象.但是,我很难获得pos最大化的完整对象,似乎通过聚合我只能得到pos属性,而不是整个对象.这是我使用的示例聚合,缺少$ifNullfor masterID:
> db.tst.aggregate([{ "$group": { "_id": "$masterID", "pos": { "$max": "$pos" } } }])
Run Code Online (Sandbox Code Playgroud)
示例对象将是:
> db.tst.find()
{ "_id" : ObjectId("547d6bd28e47d05a9a492e2e"), "masterID" : "master", "pos" : "453", "id" : "hallo" }
{ "_id" : ObjectId("547d6bda8e47d05a9a492e2f"), "masterID" : "master", "pos" : "147", "id" : "welt" }
{ "_id" : ObjectId("547d6be68e47d05a9a492e30"), "masterID" : "master2", "pos" : "1", "id" : "welt" } …Run Code Online (Sandbox Code Playgroud) 我是MongoDB的新手,来自SQL背景.
我正在尝试这样做:
Get the top Artists, based on the number of Dubs.
Run Code Online (Sandbox Code Playgroud)
数据结构 :
Artists = [
{
"dubs": [{...},{...},{...}],
"name": "The Doors",
"createdAt": "2014-12-15T15:24:26.216Z",
"updatedAt": "2014-12-15T15:24:26.216Z",
"id": "548efd2a436c850000353f4f"
},
{
"dubs": [],
"name": "The Beatles",
"createdAt": "2014-12-15T20:30:33.922Z",
"updatedAt": "2014-12-15T20:30:33.922Z",
"id": "548f44e90630d50000e2d61d"
},
{...}
]
Run Code Online (Sandbox Code Playgroud)
所以我寻求的结果将是这样的:
[{
_id: "548ef6215755950000a9a0de",
name:"The Doors",
total: 3
},{
_id: "548ef6215715300000a9a1f9",
name:"The Beatles",
total: 0
}]
Run Code Online (Sandbox Code Playgroud)
我试过了 :
Artist.native(function(err, collection) {
collection.aggregate([ {
$group: {
_id: {
name: "$name"
},
total: {
$size: "$dubs"
} …Run Code Online (Sandbox Code Playgroud) javascript mongodb mongodb-query aggregation-framework sails.js
我在MongoDb中有一个这样的文档:
{
"_id" : ObjectId("56b88d5f2628a6bca1b17f99"),
"first_name" : "JAMES",
"last_name" : "SMITH",
"accounts" : [
{
"account_type" : "Savings",
"account_balance" : 8995952.153640702,
"currency" : "PESO"
},
{
"account_type" : "Checking",
"account_balance" : 3901436.5580737568,
"currency" : "USD"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想按"last_name"和"accounts.account_type"进行分组,并汇总每个相关的余额.
我尝试像这样的点符号,但我有错误,我找不到这种聚合的解释:
db.bank_data.aggregate([
{$group:{_id: "$last_name",accounts.account_type:"$accounts.acount_type",
total:{$sum:"$accounts.account_balance"}}}])
Run Code Online (Sandbox Code Playgroud) 假设我有以下格式的匹配集合
{user1: "a", user2: "b"},
{user1: "a", user2: "c"},
{user1: "b", user2: "d"},
{user1: "b", user2: "c"},
{user1: "b", user2: "e"},
{user1: "c", user2: "f"}
Run Code Online (Sandbox Code Playgroud)
我想知道哪个用户具有最大的外观(在user1或user2中).结果应采用此格式,按出现次数排序.
{"user": "b", count:4},
{"user": "c", count:3},
{"user": "a", count:2},
{"user": "d", count:1},
{"user": "f", count:1},
{"user": "e", count:1}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以分组两个字段的值?
像match.aggregate({$ group:{_ id:{$或:["user1","user2]}},计数:{$ sum:1}})
所以我在我的人物收藏中有这些文件:
{
"_id" : ObjectId("595c0630939a8ae59053a9c3"),
"name" : "John Smith",
"age" : 37,
"location" : "San Francisco, CA",
"hobbies" : [
{
"name" : "Cooking",
"type" : "Indoor",
"regular" : true
},
{
"name" : "Baseball",
"type" : "Outdoor",
"regular" : false
}
]
}
{
"_id" : ObjectId("595c06b7939a8ae59053a9c4"),
"name" : "Miranda Thompson",
"age" : 26,
"location" : "Modesto, CA",
"hobbies" : [
{
"name" : "Lego building",
"type" : "Indoor",
"regular" : false
},
{
"name" : "Yoga",
"type" : …Run Code Online (Sandbox Code Playgroud) 我想在我的数据上创建一个汇总,以获取.Net应用程序中书籍集合的特定标签的总数。
我有以下图书课。
public class Book
{
public string Id { get; set; }
public string Name { get; set; }
[BsonDictionaryOptions(DictionaryRepresentation.Document)]
public Dictionary<string, string> Tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
数据保存后,将以以下格式存储在MongoDB中。
{
"_id" : ObjectId("574325a36fdc967af03766dc"),
"Name" : "My First Book",
"Tags" : {
"Edition" : "First",
"Type" : "HardBack",
"Published" : "2017",
}
}
Run Code Online (Sandbox Code Playgroud)
我一直在MongoDB中直接使用构面,并且可以通过使用以下查询来获得所需的结果:
db.{myCollection}.aggregate(
[
{
$match: {
"Name" : "SearchValue"
}
},
{
$facet: {
"categorizedByTags" : [
{
$project :
{
Tags: { $objectToArray: "$Tags" } …Run Code Online (Sandbox Code Playgroud) 假设这是查询:
db.movies.aggregate([
{$match: {languages: "English", cast:{$exists:true}}},
{$unwind: "$cast"},
{$group: {_id: "$cast", numFilms:{$sum: 1}, average:{$avg: "$imdb.rating"}
}},
{$sort: {numFilms:-1}},
{$limit: 1}
])
Run Code Online (Sandbox Code Playgroud)
我得到的输出:
{ "_id" : "John Wayne", "numFilms" : 107, "average" : 6.424299065420561 }
Run Code Online (Sandbox Code Playgroud)
如何截断average到单/双小数点?我想看到这样的输出:
{ "_id" : "John Wayne", "numFilms" : 107, "average" : 6.42 }
Run Code Online (Sandbox Code Playgroud)
我尝试了这篇文章,但似乎我无法摆脱与$avg运算符做同样的事情。谁能告诉我如何实现这一目标?
并且请不要将前面提到的帖子直接标记为重复的帖子,这在这里没有回答我与$avg操作员有关的问题。
我是MongoDB的新手,想知道如何计算从UTC时间12 AM到当前UTC时间每15分钟间隔插入集合中的文档总数。
以下是样本文件
{
"_id" : ObjectId("5ade8bfc6b941c7726a54f01"),
"Country" : "US"
"Timestamp" : ISODate("2018-04-24T01:44:28.040Z"),
}
Run Code Online (Sandbox Code Playgroud)
这是预期的输出:
{
"Count": 245,
"ReceiveDateString": "5/2/2018 12:00:00 AM"
},
{
"Count": 239,
"ReceiveDateString": "5/2/2018 12:15:00 AM"
},
{
"Count": 252,
"ReceiveDateString": "5/2/2018 12:30:00 AM"
},
{
"Count": 255,
"ReceiveDateString": "5/2/2018 12:45:00 AM"
},
{
"Count": 242,
"ReceiveDateString": "5/2/2018 1:00:00 AM"
}
.
.
.
and so on until current UTC time.
Run Code Online (Sandbox Code Playgroud)
我可以按分钟分组,如下所示:
var filter = Builders<Model>.Filter.Where(r => r.Timestamp > startDate && r.Timestamp < endDate);
var result …Run Code Online (Sandbox Code Playgroud) mongodb ×10
c# ×2
java ×1
javascript ×1
linq ×1
mapreduce ×1
mongoose ×1
node.js ×1
performance ×1
sails.js ×1