标签: aggregation-framework

如何匹配数组中的元素?MongoDB 聚合

我需要检查其特定字段包含在数组中的所有文档。

例如我有数组

arr = ['a', 'b', 'a']
Run Code Online (Sandbox Code Playgroud)

我想匹配所有字段等于 的my_letter文档a or b

我有文件:

[
  {
    _id: ObjectID(),
    my_letter:'d'
  },
  {
    _id: ObjectID(),
    my_letter:'a'
  },
  {
    _id: ObjectID(),
    my_letter:'b'
  }
]
Run Code Online (Sandbox Code Playgroud)

我希望聚合返回

[
  {
    _id: ObjectID(),
    my_letter:'a'
  },
  {
    _id: ObjectID(),
    my_letter:'b'
  }
]
Run Code Online (Sandbox Code Playgroud)

我在我的$match管道中尝试过这个

{
  $match: {
    _id: {
      $elemMatch: {
        $or: [
          { $eq: ["a"] },
          { $eq: ["b"] },
        ],
      },
    },
  },
},
Run Code Online (Sandbox Code Playgroud)

当然是行不通的。您建议如何完成 $match 管道?

mongodb aggregation-framework

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

如何根据给定的标准(mongo聚合框架)简单地计算文档?

我想简单地计算文件.执行以下操作的正确方法是什么:

db.my_collection.aggregate({
    $match: { // go by the indexed field
        date: {
            $gte: new Date(2013,1,20),
            $lte: new Date(2013,1,27)
        }
    }
},{
    $match: { // go by some other field
        someField: 'someValue'
    }
},{
    $count: { // $sum? $group? $anythingElse?
        // ???????
    }
})
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

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

日期聚合框架

我正试图在Mongo中按日期聚合数据,但我无法达到我想要的效果.现在,我正在使用这个:

db.aggregData.aggregate( { $group: {_id: "$Date".toString(),  
                                   tweets: { $sum: "$CrawledTweets"} } }, 
                         { $match:{ _id: {$gte: ISODate("2013-03-19T12:31:00.247Z") }}}, 
                         { $sort: {Date:-1} } 
                       )
Run Code Online (Sandbox Code Playgroud)

结果如下:

"result" : [
                {
                        "_id" : ISODate("2013-03-19T12:50:00.641Z"),
                        "tweets" : 114
                },
                {
                        "_id" : ISODate("2013-03-19T12:45:00.631Z"),
                        "tweets" : 114
                },
                {
                        "_id" : ISODate("2013-03-19T12:55:00.640Z"),
                        "tweets" : 123
                },
                {
                        "_id" : ISODate("2013-03-19T12:40:00.628Z"),
                        "tweets" : 91
                    },
                {
                        "_id" : ISODate("2013-03-19T12:31:00.253Z"),
                        "tweets" : 43
                },
                {
                        "_id" : ISODate("2013-03-19T13:20:00.652Z"),
                        "tweets" : 125
                },
                {
                        "_id" : ISODate("2013-03-19T12:31:00.252Z"),
                        "tweets" …
Run Code Online (Sandbox Code Playgroud)

date mongodb node.js aggregation-framework

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

聚合请求MongoDB

我想在条件集合列表中获取多个字段.我尝试了一个聚合请求,但我有一个错误.

我的请求

db.people.aggregate({$match:{createdDate:{$exists:true},"ad":"noc2"}},{$group:{value2:$value2}});

我的Json:


    db.test.findOne();
{
        "_id" : ObjectId("51e7dd16d2f8db27b56ea282"),
        "ad" : "noc2",
        "list" : {
                "p45" : {
                        "id" : "p45",
                        "date" : ISODate("2014-01-01T12:18:30.568Z"),
                        "value3" : 21,
                        "value1" : 100,
                        "value2" : 489
                },
                "p6" : {
                        "id" : "p6"
                        "date" : ISODate("2013-07-18T12:18:30.568Z"),
                        "value3" : 21,
                        "value1" : 100,
                        "value2" : 489
                },
                "p4578" : {
                       "id" : "4578"
                        "date" : ISODate("2013-07-18T12:18:30.568Z"),
                        "value3" : 21,
                        "value1" : 100,
                        "value2" : 489
                }
        }
}

我希望得到这个json,例如,结果:

{id:p45,value:587},{id:p4578,value:47},{id:p6,value:2}
Run Code Online (Sandbox Code Playgroud)

hashmap mongodb aggregation-framework

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

使用MongoDB在聚合框架中按$ geoNear排序

正在阅读Mongo中的$ geoNear,但不能用于以下目的:我有以下JSON:

{
user: "bruno",
location: [30.45, 45.5],
other_fields...
}
Run Code Online (Sandbox Code Playgroud)

我想在我的应用程序管道中应用类似于以下命令的geoNear.可能吗?我想按地理位置字段排序.

db.places.find({coords:{$geoWithin:{$center:[[-23.017812,-45.544617],10]}}})
Run Code Online (Sandbox Code Playgroud)

谢谢.

geospatial mongodb aggregation-framework

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

聚合后如何取回原始文档

我有一个案例,我想查询在数组字段"窗体"下有许多项目的文档集合.要解决的问题是希望返回具有"窗体"中包含的所有文档的文档,其特定状态为"已关闭".

所以这里是集合中两个不同文档的示例:

{
    "_id" : "Tvq444454j",
    "name" : "Jim",
    "forms" : [
        {
            "name" : "Jorney",
            "status" : "closed"
        },
        {
            "name" : "Women",
            "status" : "void"
        },
        {
            "name" : "Child",
            "status" : "closed"
        },
        {
            "name" : "Farm",
            "status" : "closed"
        }
    ]
},

{
    "_id" : "Tvq579754r",
    "name" : "Tom",
    "forms" : [
        {
            "name" : "PreOp",
            "status" : "closed"
        },
        {
            "name" : "Alert",
            "status" : "closed"
        },
        {
            "name" : "City", …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

Mongoose如何在日期范围内查询并提取每天的最高价值?

如何使用mongoose/mongodb设计查询以在日期范围内进行搜索并提取该范围内每天的最高价格值?现在,我知道如何执行此操作的唯一方法是在日期范围内执行查询,然后处理结果以获取每天的最高价格.但这似乎是一个常见的需求,所以我想知道是否可以在查询中完成所有操作:

这是我的模型,它提供了一些可以在查询中使用的不同内容.该date属性是Date类型,day属性是字符串类型.该day属性采用这种格式day: "02/11/2014".该price属性是Number数据类型,它采用以下格式:price: 114.61

// Price Schema
var PriceSchema = new Schema({
    full_date: {
        type: String,
        required: true,
        unique: true,
        trim: true
    },
    day: {
        type: String,
        required: true,
        trim: true
    },
    price: {
        type: Number,
        required: true,
        trim: true
    },
    date: {
        type: Date,
        unique: true,
        required: true
    }
});
Run Code Online (Sandbox Code Playgroud)

这是日期范围内的查询,但是我可以做类似于每个日期返回最高价格的事情吗?

Price.find({ date: { $lt: end, $gt: start }}, function(err, prices) {
            if (err) {
                console.log(err);
            } else …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb node.js aggregation-framework

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

MongoDB将对象与对象数组聚合在一起?

这是我收藏中的一部分json

[{"company":"Lenovo", "models": 
    [{"model":"ThinkPad T400", "gens": 
        [{"gen":"3", "start":2012},
        {"gen":"2", "start":2008},
        {"gen":"1", "start":2004}]
    }...]
}...]
Run Code Online (Sandbox Code Playgroud)

我试图提出一个聚合命令,该命令将返回以下内容:

[{ "_id":"Lenovo", 
  "models":[{ "model": "ThinkPad T400", 
              "gens":["1","2","3"]
            }...]
}...]
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下聚合命令,但是没有用:

db.makes.aggregate([{
    $group:{
        _id: '$company',
        models: { $push:  { 
            model: "$models.model", 
            gen: "$models.gens.gen"
        }} 
    } 
}])
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

[{ "_id":"Lenovo", 
  "models":[{ "model": ["ThinkPad T400"], 
              "gens":[ ["1","2","3"] ]
            }...]
}...]
Run Code Online (Sandbox Code Playgroud)

可能是因为每个我的对象都有一个对象数组(模型),而这些对象也有一个对象数组(Gens)。

对MongoDB的正确要求是什么,它将使我得到预期的结果?

mongodb aggregation-framework

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

使用mapReduce在mongodb中检索总和以及计数

我如何使用mapReduce将以下SQL查询转换为mongoDB

SELECT mobile, SUM( amount ),count(mobile) as noOfTimesRecharges
FROM recharge
WHERE recharge_date  between  '2015-02-26' AND  '2015-03-27'
GROUP BY mobile
having noOfTimesRecharges > 0 and  noOfTimesRecharges < 5
Run Code Online (Sandbox Code Playgroud)

我试过了

db.users.mapReduce(
function(){
emit(this.mobile,this.amount);
},
function(k,v){
return Array.sum(v)
},
{
query:{
recharge_date:{$gte:ISODate("2014-06-17"),$lte:ISODate("2014-06-20")}
},
out:"one_month_data" 
}).find();
Run Code Online (Sandbox Code Playgroud)

这给了我结果而不是计数。

javascript mapreduce mongodb mongodb-query aggregation-framework

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

MongoDB - 从avg聚合的结果中获取最大值

我收集了产品,这些产品都有评估.我需要选择具有最高评估平均值的产品.问题是我可以按平均分组产品但我无法按平均分组并选择平均值最高的产品.

要重现我的问题,请按照下列步骤操作:

插入产品:

db.products.insert([
{
    name: "Product1",
    price: 1000,
    features: {
        feature1: 0.8,
        feature2: 23
    },
    tags: ["tag1", "tag2", "tag3", "tag4"],
    assessments: [
        {name: "John", assessment: 3},
        {name: "Anna", assessment: 4},
        {name: "Kyle", assessment: 3.6}
    ] 
},
{
    name: "Product2",
    price: 1200,
    features: {
        feature1: 4,
        feature2: 4000,
        feature3: "SDS"
    },
    tags: ["tag1"],
    assessments: [ 
        {name: "John", assessment: 5},
        {name: "Richard", assessment: 4.8}
    ]
},
{
    name: "Product3",
    price: 450,
    features: {
        feature1: 1.3,
        feature2: 60
    },
    tags: ["tag1", "tag2"], …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

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