标签: aggregation-framework

是否可以使用聚合框架将MongoDB中的2个字段相加?

我有一个包含字段类型,totalA和totalB的文档的集合

我想使用聚合框架以按类型分组 - 并将totalA和totalB的总和加在一起.

我尝试的最后一件事(不起作用)是:

'$group' : { 
  '_id' : '$type', 
  'totalA' : { '$sum' : '$totalA' },
  'totalB' : { '$sum' : '$totalB' },
  'totalSum' : { '$sum' : '$totalA', '$sum' : '$totalB' },
}  }
Run Code Online (Sandbox Code Playgroud)

totalSum只有一个字段的总和而不是组合值.

mongodb pymongo aggregation-framework

13
推荐指数
3
解决办法
1万
查看次数

MongoDB获得SubDocument

我想从MongoDB中的文档中检索子文档.我有以下文件:

{
    "_id" : "10000",
    "password" : "password1",
    "name" : "customer1",
    "enabled" : true,
    "channels" : [ 
        {
            "id" : "10000-1",
            "name" : "cust1chan1",
            "enabled" : true
        }, 
        {
            "id" : "10000-2",
            "name" : "cust1chan2",
            "enabled" : true
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

{
    "id" : "10000-1",
    "name" : "cust1chan1",
    "enabled" : true
}
Run Code Online (Sandbox Code Playgroud)

但是,到目前为止我能做的最好的事情是使用以下查询:

db.customer.find({"channels.id" : "10000-1"}, {"channels.$" : 1, "_id" : 0})
Run Code Online (Sandbox Code Playgroud)

但这给了我以下结果:

{
    "channels" : [ 
        {
            "id" : "10000-1",
            "name" : "cust1chan1",
            "enabled" : true
        }
    ] …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

在聚合顺序中使用$$ ROOT

我试着通过一些订单从集合中获取数据:

db.data.aggregate([
    {$limit: 1000},
    {$group: {
        _id: "$service",
        count: {$sum: 1},
        data: {$push: '$$ROOT'}
    }}
]);
Run Code Online (Sandbox Code Playgroud)

但得到下一个错误:

Error("Printing Stack Trace")@:0
()@src/mongo/shell/utils.js:37
([object Array])@src/mongo/shell/collection.js:866
@(shell):6

uncaught exception: aggregate failed: {
    "errmsg" : "exception: FieldPath field names may not start with '$'.",
    "code" : 16410,
    "ok" : 0
}
Run Code Online (Sandbox Code Playgroud)

我哪里做错了?

mongodb aggregation-framework

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

在mongoDB中执行union

我想知道如何在MongoDB中的聚合中执行一种联合.让我们在集合中对以下文档进行成像(结构是为了示例):

{
  linkedIn: {
    people : [
    {
      name : 'Fred'
     },
     {
       name : 'Matilda'
     }
   ]
  },
  twitter: {
    people : [
    {
       name : 'Hanna'
    },
    {
       name : 'Walter'
    }
   ]
  }
 }
Run Code Online (Sandbox Code Playgroud)

如何制作一个返回twitter和linkedIn中人员联合的聚合?

{
 { name :'Fred', source : 'LinkedIn'},
 { name :'Matilda', source : 'LinkedIn'},
 { name :'Hanna', source : 'Twitter'},
 { name :'Walter', source : 'Twitter'},
}
Run Code Online (Sandbox Code Playgroud)

union mongodb aggregation-framework

13
推荐指数
1
解决办法
2万
查看次数

MongoDb:聚合$ lookup,过滤外部文档

考虑到几个集合:

1.-用户

{
  name: ...
  id: ...
  city: ...
  age: ...
  otherdata: ...
}
Run Code Online (Sandbox Code Playgroud)

2.- PETS

{
  name: ...
  owner: ...
  type: ...
  age: ...
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用$ lookup聚合来构建一组代表用户及其宠物的对象:

collectionusers.aggregate([
   {
     $lookup: {
       from: "pets",
       localField: "id",
       foreignField: "owner",
       as: "pets"
     }
   }
]);
Run Code Online (Sandbox Code Playgroud)

但是我想添加一个过滤器,以便只为每个用户添加1年以上的宠物(使用宠物对象内的年龄).

问题是,在聚合中添加$ match不起作用,因为它过滤掉没有旧宠物的用户,我希望用户即使没有宠物也能在那里.

实际上我也试图以同样的方式只获得每个用户中最老的宠物,我也没有找到配方.

在聚合中执行此操作的任何方法?

当然,目前我正在对返回的对象进行操作.

提前致谢.

mongodb mongodb-query aggregation-framework

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

使用MongoDB聚合框架计算一阶导数

是否可以使用聚合框架计算一阶导数?

例如,我有数据:

{time_series : [10,20,40,70,110]}
Run Code Online (Sandbox Code Playgroud)

我正在尝试获得如下输出:

{derivative : [10,20,30,40]}
Run Code Online (Sandbox Code Playgroud)

python mapreduce mongodb pymongo aggregation-framework

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

对MongoDB中的集合进行递归搜索

我在MongoDB中有一个带有树结构的文档列表,其中使用了带有父引用模型的模型树结构.我想要一个聚合查询,它返回祖先列表(直到根),给定'name'属性.

结构体:

{
  '_id': '1',
  'name': 'A',
  'parent': '',
},
{
  '_id': '2',
  'name': 'B',
  'parent': 'A',
},
{
  '_id': '3',
  'name': 'C',
  'parent': 'B',
},
{
  '_id': '4',
  'name': 'D',
  'parent': 'C',
}
Run Code Online (Sandbox Code Playgroud)

聚合结果:(给定,名称='D')

{
  '_id': '4',
  'name': 'D',
  'ancestors': [{name:'C'}, {name:'B'}, {name:'A'}]
}
Run Code Online (Sandbox Code Playgroud)

Note:我现在无法更改文档结构.这会造成很多问题.我看到许多解决方案建议将模型树结构与祖先数组一起使用.但我现在不能用它.有没有办法用上面的模式使用单个聚合查询来实现它?谢谢

tree-structure mongodb aggregation-framework

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

$ match in $ lookup结果

我有下一个mongo代码:

db.users.aggregate([
    { 
        $match: { 
            $and: [
                { UserName: { $eq: 'administrator' } }, 
                { 'Company.CompanyName': { $eq: 'test' } }
            ]                   
        } 
    },
    { 
        $lookup: { 
            from: "companies", 
            localField: "CompanyID", 
            foreignField: "CompanyID", 
            as: "Company" 
        } 
    },
])
Run Code Online (Sandbox Code Playgroud)

$lookup部分代码工作的伟大.我得到了下一个结果:

在此输入图像描述 在此输入图像描述

但是,如果我添加$match代码,它什么也没带来.

我发现问题出现在第二场比赛中: { 'Company.CompanyName': { $eq: 'test' } }但是我无法意识到它有什么问题.有任何想法吗?

更新:

我也尝试$unwind$lookup结果,但没有运气:

db.users.aggregate([
    { 
        $match: { 
            $and: [
                { UserName: { $eq: 'administrator' } }, 
                { 'Company.CompanyName': { $eq: 'edt5' } }
            ] …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

13
推荐指数
2
解决办法
3万
查看次数

MongoDB中的计算分组字段

对于MongoDB文档中的此示例,如何使用MongoTemplate编写查询?

db.sales.aggregate(
   [
      {
        $group : {
           _id : { month: { $month: "$date" }, day: { $dayOfMonth: "$date" }, year: { $year: "$date" } },
           totalPrice: { $sum: { $multiply: [ "$price", "$quantity" ] } },
           averageQuantity: { $avg: "$quantity" },
           count: { $sum: 1 }
        }
      }
   ]
)
Run Code Online (Sandbox Code Playgroud)

或者一般来说,我如何按计算字段分组?

java mongodb spring-data aggregation-framework spring-mongodb

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

使用C#聚合$ lookup

我有以下MongoDb查询工作:

db.Entity.aggregate(
    [
        {
            "$match":{"Id": "12345"}
        },
        {
            "$lookup": {
                "from": "OtherCollection",
                "localField": "otherCollectionId",
                "foreignField": "Id",
                "as": "ent"
            }
        },
        { 
            "$project": { 
                "Name": 1,
                "Date": 1,
                "OtherObject": { "$arrayElemAt": [ "$ent", 0 ] } 
            }
        },
        { 
            "$sort": { 
                "OtherObject.Profile.Name": 1
            } 
        }
    ]
)
Run Code Online (Sandbox Code Playgroud)

这将检索与另一个集合中的匹配对象连接的对象列表.

有没有人知道如何使用LINQ或使用这个确切的字符串在C#中使用它?

我尝试使用以下代码,但它似乎无法找到类型QueryDocumentMongoCursor- 我认为它们已被弃用?

BsonDocument document = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>("{ name : value }");
QueryDocument queryDoc = new QueryDocument(document);
MongoCursor toReturn = _connectionCollection.Find(queryDoc);
Run Code Online (Sandbox Code Playgroud)

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

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