标签: mongodb-aggregation

mongo中的组,不包括空值

我有mongo查询,它对文档进行组操作.

我几乎得到了预期的结果,除了我想要在没有空值或空值的情况下优化结果.

目前我的查询如下所示:

db.productMetadata.aggregate([{$group:{"_id":{"color":"$productAttribute.colour","gender":"$productAttribute.gender"},"count" : {$sum : 1}}}]);
Run Code Online (Sandbox Code Playgroud)

结果看起来像这样:

{ "_id" : { "color" : "BLUE", "gender" : "MEN" }, "count" : 1 }
{ "_id" : {  }, "count" : 4 }
{ "_id" : { "color" : "NA", "gender" : "WOMEN" }, "count" : 1 }
{ "_id" : { "color" : "BLACK", "gender" : "MEN" }, "count" : 1 }
{ "_id" : { "color" : "BROWN", "gender" : "WOMEN" }, "count" : 1 }
{ "_id" …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework mongodb-aggregation

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

是否可以在Mongodb中的两个数据库之间进行$ lookup聚合?

我正在尝试做这样的事情:

use user; 

db.user.aggregate([
    {
      $lookup:
        {
          from: "organization.organization",
          localField: "organizationId",
          foreignField: "uuid",
          as: "user_org"
        }
   }
])
Run Code Online (Sandbox Code Playgroud)

user并且organization在两个不同的数据库中.

如果不可能,有哪些替代方案?

mongodb mongodb-query mongodb-aggregation

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

MongoDB - 使用$ group在$ lookup后重绕$ unwind嵌套数组

MongoDB聚合按分钟呈指数级复杂化!

我在迄今为$unwind嵌套数组,然后执行$lookup_id每一个对象的从unwinded嵌套数组.我的最后一次尝试是逆转放松$group.但是,我无法使用其原始属性名称以及每个文档的其余原始直接属性重建原始嵌入数组.

这是我到目前为止的尝试:

db.users.aggregate([
    {
        $unwind: "$profile",
        $unwind: {
            path: "$profile.universities",
            preserveNullAndEmptyArrays: true
        }
    },
    {
        $lookup: {
            from: "universities",
            localField: "profile.universities._id",
            foreignField: "_id",
            as: "profile.universities"
        }
    },
    {
        $group: {
            _id: "$_id",
            emails: { "$first": "$emails" },
            profile: { "$first": "$profile" },
            universities: { "$push": "$profile.universities" }
        }
    }
]).pretty()
Run Code Online (Sandbox Code Playgroud)

我得到的是这样的:

{
    "_id" : "A_USER_ID",
    "emails" : [
        {
            "address" : "AN_EMAIL_ADDRESS",
            "verified" : false
        }
    ],
    "profile" : {
        "name" …
Run Code Online (Sandbox Code Playgroud)

join mongodb mongodb-query aggregation-framework mongodb-aggregation

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

如何在mongoDB中对$ lookup结果应用条件?

在我之前的问题的参考,我有一个关于$ lookup的问题,添加一些条件.您可以从以下链接描述中获得有关问题的足够参考.

照片:

{_id: 1, photo_name: '1.jpg', photo_description: 'description 1', album_id: 1, flag:1 },
{_id: 2, photo_name: '2.jpg', photo_description: 'description 2', album_id: 1, flag:1 },
{_id: 3, photo_name: '3.jpg', photo_description: 'description 3', album_id: 1, flag:1 },
{_id: 4, photo_name: '4.jpg', photo_description: 'description 4', album_id: 2, flag:0 },
{_id: 5, photo_name: '5.jpg', photo_description: 'description 5', album_id: 2, flag:0 },
{_id: 6, photo_name: '6.jpg', photo_description: 'description 6', album_id: 2}
Run Code Online (Sandbox Code Playgroud)

专辑:

{_id: 1, album_name: "my album 1", album_description: "album description 1", emoji_id: 1}, …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework mongodb-aggregation

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

猫鼬对所有文档求和一个值

我希望计算与我的查询匹配的文档中名称数量的所有列,

 tickets.count({time: {$gte: a}, time: {$lte: tomorrow}}).then(function (numTickets) {
Run Code Online (Sandbox Code Playgroud)

如何获得称为金额的文档列的总结果?

例如,如果我有:

{ time: 20, amount: 40}
{ time: 40, amount: 20}
Run Code Online (Sandbox Code Playgroud)

它会返回总金额(60)?

请记住,我确实需要{time: {$gte: a}, time: {$lte: tomorrow}在查询中使用。

我该怎么做?

javascript mongoose mongodb aggregation-framework mongodb-aggregation

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

如何在mongodb shell中使用for循环?

我怎样才能在mongo db shell中使用for循环?

我的尝试在这一点上坚持:

for (var i = 0; i <= 6; i=i+0.12){
var n = i + 0.12;
db.test.aggregate(
    { $sort: {'deviation': -1}},
    { $unwind: '$foo' },
    { $match: { 'foo.km': {$gt: {n}, $lt: {i}}}},
    { $limit: 1}
)
}
Run Code Online (Sandbox Code Playgroud)

感谢帮助!

mongodb mongo-shell mongodb-query aggregation-framework mongodb-aggregation

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

MongoDB在聚合查询中获取第一个和最后一个文档

如何根据time字段获取第一个和最后一个文档.我可以使用$group和获取$first$last记录,但我不需要在这里分组,只需获得第一个和最后一个完整的文档.也许我可以使用slice?此查询不起作用:

{
  "aggregate": "353469045637980_data",
  "pipeline": [
    {
      "$match": {
        "$and": [
          {
            "time": {
              "$gte": 1461369600
            }
          },
          {
            "time": {
              "$lt": 1461456000
            }
          }
        ]
      }
    },
    {
      "$project": {
        "first": {
          "$slice": 1
        },
        "last": {
          "$slice": -1
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework mongodb-aggregation

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

Mongodb WeekofMonth?

我坚持实现weekofMonth而不是WeekofYear. 有人可以指导我如何做到这一点吗?

db.activity.aggregate([
    {
        $group:{
            _id: {
                week: { $week: "$createdAt" }, 
                month: { $month: "$createdAt" },      
                year: { $year: "$createdAt" } 
            },
            count: { $sum: 1 }
        }
     },
     { $match : { "_id.year" : 2016, "_id.month" : 5 } }
])
Run Code Online (Sandbox Code Playgroud)

输出

/* 1 */
{
    "_id" : {
        "week" : 19,
        "month" : 5,
        "year" : 2016
    },
    "count" : 133.0
}

/* 2 */
{
    "_id" : {
        "week" : 18,
        "month" …
Run Code Online (Sandbox Code Playgroud)

date-format mongodb mongodb-aggregation

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

mongodb - 查找其他集合中的值计数

我想找到 collectionTwo 中存在多少个 collectionOne 以下的“taskId”。此处,collectionOne 下面的“taskId”嵌入在文档中的数组中。

另外,让我知道执行此操作的不同方法(如果可能)。

db.collectionOne.find({"sId":"DCNrnPeKFrBv" }).pretty()
{
        "_id" : "sX8o7mJhebs",
        "sId" : "DCNrnPeKFrBv",
        "data" : [
                {
                        "oId" : "7SycYQ",
                        "taskId" : 146108906
                },
                {
                        "oId" : "7SycYQ",
                        "taskId" : 14623846
                },
                {
                        "oId" : "fANQ",
                        "taskId" : 1461982
                },
                {
                        "oId" : "fAeNQ",
                        "taskId" : 131732
                },
                {
                        "oId" : "t6AF5yn",
                        "taskId" : 197681
                }
        ]
}



> db.collectionTwo.find().pretty().limit(2)
{
        "_id" : 146108906,
        "oId" : "7SycYQ",
        "name" : "ABC"
}
{
        "_id" : 1461982,
        "oId" : …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework mongodb-aggregation

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

对象数组中的 Mongo DB 不同值组

假设我有一个像下面这样的文档模型

{
"_id" : "QggaecdDWkZzMmmM8",
"features" : [ 
    {
        "language" : "en",
        "values" : [ 
            {
                "name" : "feature 1",
                "values" : [ 
                    "test", 
                    "best"
                ]
            }, 
            {
                "name" : "feature2",
                "values" : [ 
                    "guest", 
                    "nest"
                ]
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我需要运行查询并返回特征的唯一名称和值对。就像一个文档的名称特征 1 带有“test”和最佳值,另一个文档具有相同的键(特征 1 具有不同的值,即“guest”),因此结果将是

name: featuer 1 
values: [test, best and guest]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我尝试了以下查询,但最后返回错误

db.getCollection('products').aggregate(
{$unwind: '$features'},
{$group: 
{_id: "$features.values.name"},
name: {$addToSet: '$name'}
})
Run Code Online (Sandbox Code Playgroud)

错误信息是

例外:管道阶段规范对象必须只包含一个字段

mongodb mongodb-query aggregation-framework mongodb-aggregation

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