标签: aggregation-framework

mongodb中的数组交集与聚合框架

我有一个模式集合(猫鼬)说:

{
  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

任何人的想法?

mongoose mongodb node.js aggregation-framework

1
推荐指数
1
解决办法
1076
查看次数

从MongoDB中的一个查询中获取多个字段数?

我有一系列事件,其结构如下:

{
    "_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)

java performance mapreduce mongodb aggregation-framework

1
推荐指数
1
解决办法
1703
查看次数

通过mongodb聚合中的$ max获取完整对象

我需要通过分组对象的集合masterIDid如果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 aggregation-framework

1
推荐指数
1
解决办法
1180
查看次数

SailsJS和MongoDB聚合框架与自定义查询有关

我是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

1
推荐指数
1
解决办法
3130
查看次数

我可以使用点表示法在mongoDB中聚合嵌入式文档吗?

我在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)

mongodb aggregation-framework

1
推荐指数
1
解决办法
3401
查看次数

使用两个可能字段中的值进行分组

假设我有以下格式的匹配集合

     {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}})

mongodb mongodb-query aggregation-framework

1
推荐指数
1
解决办法
44
查看次数

如何在MongoDB查询中过滤和映射文档数组?

所以我在我的人物收藏中有这些文件:

{
        "_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)

mongodb aggregation-framework

1
推荐指数
1
解决办法
4724
查看次数

在聚合框架C#中使用构面

我想在我的数据上创建一个汇总,以获取.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)

c# mongodb aggregation-framework mongodb-.net-driver

1
推荐指数
1
解决办法
1516
查看次数

MongoDB-如何将浮点值总计截断为一或两个小数点?

假设这是查询:

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 mongodb-query aggregation-framework

1
推荐指数
1
解决办法
2420
查看次数

MongoDB .NET驱动程序按时间范围分组

我是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)

c# linq mongodb aggregation-framework mongodb-.net-driver

1
推荐指数
1
解决办法
1587
查看次数