标签: aggregation-framework

MongoDB Aggregation Framework $ group使用嵌套操作

我有几个数字字段需要聚合.假设我的文档结构如下:

_id: 1234,
numValue1: 10,
numValue2: 20,
numValue3: 30,
numValue4: 40
Run Code Online (Sandbox Code Playgroud)

如果我想使用其中一个数字字段向我的管道添加计算字段,我可以这样做:

db.myCollection.aggregate(
{ 
  $project : {
    someComputedField : { $add:["$numValue1", 15] }
  }
})
Run Code Online (Sandbox Code Playgroud)

如果我想根据其中两个字段添加一个计算字段,我知道我可以这样做:

db.myCollection.aggregate(
{ 
  $project : {
    someComputedField : { $add:["$numValue1", "$numValue2"] }
  }
})
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是如果我需要做$ numValue1 + $ numValue2 + $ numValue3 + $ numValue4?

或者更有趣的是$ numValue1*($ numValue2 + $ numValue3)/ $ numValue4?

mongodb aggregation-framework

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

MongoDB聚合/展开/组/项目查询组合

我有以下格式的集合中的记录:

"_id" : "2013-05-23",
    "authors_who_sold_books" : [
        {
            "id" : "Charles Dickens",
            "num_sold" : 1,
            "customers" : [
                {
                   "time_bought" : 1368627290,
                   "customer_id" : 9715923
                }
            ]
        },
        {
            "id" : "JRR Tolkien",
            "num_sold" : 2,
            "customers" : [
                {
                    "date_bought" : 1368540890,
                    "customer_id" : 9872345
                },
                {
                    "date_bought" : 1368537290,
                    "customer_id" : 9163893
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

每个日期都有一个记录,其中许多日期将包含同一作者.我正在查询返回以下内容:

{
    "_id" : "Charles Dickens",
    "num_sold" : 235,
    "customers" : [
        {
            "date_bought" : 1368627290,
            "customer_id" : 9715923
        },
        { …
Run Code Online (Sandbox Code Playgroud)

ruby mongodb aggregation-framework

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

减少mongoDB查询的响应

我有这样的文件:

{
    "_id" : ObjectId("53340d07d6429d27e1284c77"),
    "worktypes" : [ 
        {
            "name" : "Pompas",
            "works" : [ 
                {
                    "name" : "work 1",
                    "code" : "0001"
                }
            ]
        },
        {
            "name" : "Pompas "",
            "works" : [ 
                {
                    "name" : "work 2",
                    "code" : "0002"
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我做了一个查询,只获取本文档的工作类型之一的作品,这是查询:

db.categories.find({$and: [
        { "_id": ObjectId('53340d07d6429d27e1284c77')},
        {"worktypes.name": "Pompas"}
    ]},{"worktypes.works.$":1})
Run Code Online (Sandbox Code Playgroud)

但我得到了

    {
    "_id" : ObjectId("53340d07d6429d27e1284c77"),
    "worktypes" : [ 
        {
            "name" : "Pompas",
            "works" : [ 
                {
                    "name" : "work 1",
                    "code" : "0001"
                } …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

如何在MongoDb中为搜索的文档分配权重?

对于您来说,这听起来像是一个简单的问题,但我花了3个多小时才能实现,但是我陷入了困境。

输入

  1. 关键字清单
  2. 标签清单

问题陈述:我需要从数据库中找到满足以下条件的所有文档:

  1. 列出具有1个或多个匹配关键字的文档。(已实现)
  2. 列出具有1个或多个匹配标签的文档。(已实现)
  3. 根据权重对找到的文档进行排序:每个匹配的关键字携带2分,每个匹配的标签携带1分。

查询:如何达到要求#3。

我的尝试:在我的尝试中,我只能根据关键字match列出(也不要将weight乘以2)。

标签是文档的数组。每个标签的结构就像

{
   "id" : "ICC",
   "some Other Key" : "some Other value"
}
Run Code Online (Sandbox Code Playgroud)

关键字是字符串数组:

["women", "cricket"]
Run Code Online (Sandbox Code Playgroud)

查询:

var predicate = [
    {
        "$match": {
            "$or": [
                {
                    "keywords" : {
                        "$in" : ["cricket", "women"]
                    }
                },
                {
                    "tags.id" : {
                        "$in" : ["ICC"]
                    }
                }
            ]
        }
    },
    {
        "$project": {
            "title":1,
            "_id": 0,
            "keywords": 1,
            "weight" : {
                "$size": {
                    "$setIntersection" : [
                        "$keywords" , …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

嵌套元素的合并/叉积MongoDB

有没有一种方法可以在MongoDB中组合/产生嵌套元素的叉积。举例来说,我有

{
  images: 
  [
    {
        name: 'A',
        url: 'urlA'
    }, 
    {
        name: 'B',
        url: 'urlB'
    }
  ],
  tags: [
    {
        name: 'Tag1',
        description: 'description1'
    },
    {
        name: 'Tag2',
        description: 'description2'         
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

通过首选结果应该是

[
    {
        url: 'urlA',
        name: 'Tag1'
    },
    {
        url: 'urlA',
        name: 'Tag2'
    },
    {
        url: 'urlB',
        name: 'Tag1'
    },
    {
        url: 'urlB',
        name: 'Tag2'
    }
]
Run Code Online (Sandbox Code Playgroud)

是否可以将生成的文档存储在新集合中?

mongodb mongodb-query aggregation-framework

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

mongoDB - MapReduce finalize创建NaN值

我为以下数据结构创建了MapReduce作业:

{ "_id" : 1), "docid" : 119428, "term" : 5068, "score" : 0.198 }
{ "_id" : 2), "docid" : 154690, "term" : 5068, "score" : 0.21 }
{ "_id" : 3), "docid" : 156278, "term" : 5068, "score" : 0.128 }

{ "_id" : 4), "docid" : 700, "term" : "fire", "score" : 0.058 }
{ "_id" : 5), "docid" : 857, "term" : "fire", "score" : 0.133 }
{ "_id" : 6), "docid" : 900, "term" : …
Run Code Online (Sandbox Code Playgroud)

mapreduce mongodb mongodb-query aggregation-framework

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

Mongodb graphLookup

由于MongoDB最近引入了graphLookup,我试图找出是否可以保存一个简单的社交关系图.我目前正在使用neo4j.

我理解graphLookup是一个递归搜索,它只是通过每个文档的'connectFromField'更深入.

虽然我能够做基本的东西,但我想为每个关系提供更多的属性.例如,这里的第一个例子:(员工和报告层次结构)

https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup/

{ "_id" : 2, "name" : "Eliot", "reportsTo" : "Dev" }
Run Code Online (Sandbox Code Playgroud)

如果我需要在'reportsTo'值中添加一个开始日期,可以这样:

{ "_id" : 2, "name" : "Eliot", "reportsTo" : {"name": "Dev", "from": "date"  } }
Run Code Online (Sandbox Code Playgroud)

我担心这不受支持.

我想知道是否有人以这种方式使用了MongoDB.

mongodb aggregation-framework

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

Spring Boot MongoDB聚合管道线找不到类型的属性

我有一个称为“约会”的文档集合,我正在尝试将每天的约会数量分组在一起,并填充一个称为AppointmentSummary的对象列表,其中每天将有一个对象,我正在使用Spring boot尝试并实现这一点,但是我一直遇到问题。

我在同一包中创建了以下三个类

AppointmentSummaryRepository.java

public interface AppointmentSummaryRepository extends
MongoRepository<Appointment,String>, AppointmentSummaryRepositoryCustom {

}
Run Code Online (Sandbox Code Playgroud)

AppointmentSummaryRepositoryCustom.java

public interface AppointmentSummaryRepositoryCustom {

List<AppointmentSummary> aggregate(LocalDate startDate, LocalDate endDate);
Run Code Online (Sandbox Code Playgroud)

}

AppointmentSummaryRepositoryImpl.java

public class AppointmentSummaryRepositoryImpl implements    AppointmentSummaryRepositoryCustom {

    private final MongoTemplate mongoTemplate;

    private final Logger log = LoggerFactory.getLogger(AppointmentSummaryRepositoryImpl.class);


    @Autowired
    public AppointmentSummaryRepositoryImpl(MongoTemplate mongoTemplate){
        this.mongoTemplate = mongoTemplate;
    }


    @Override
    public List<AppointmentSummary> aggregate(LocalDate startDate, LocalDate endDate){
        log.debug("This is a request to aggerate appointment summary between {} to {}", startDate.toString(), endDate.toString());
        MatchOperation matchOperation = getMatchOperation(startDate, endDate);
        GroupOperation groupOperation = getGroupOperation();
        log.debug("End group …
Run Code Online (Sandbox Code Playgroud)

java spring mongodb aggregation-framework

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

汇总和减少嵌套文档和数组

编辑:我们的用例:我们从服务器获取有关访客的继续报告。将这些“报告”插入MongoDB之后,我们会在服务器上预聚合几秒钟的数据。

在我们的信息中心中,我们想根据时间范围查询不同的浏览器,操作系统,地理位置(国家等)。

就像这样:在过去7天内,有1000位使用Chrome的访客,来自德国的500位访客,来自英国的200位,依此类推。

我非常需要仪表板所需的MongoDB查询。

我们有以下报告条目:

{
    "_id" : ObjectId("59b9d08e402025326e1a0f30"),
    "channel_perm_id" : "c361049fb4144b0e81b71c0b6cfdc296",
    "source_id" : "insomnia",
    "start_timestamp" : ISODate("2017-09-14T00:42:54.510Z"),
    "end_timestamp" : ISODate("2017-09-14T00:42:54.510Z"),
    "timestamp" : ISODate("2017-09-14T00:42:54.510Z"),
    "resource_uri" : "b755d62a-8c0a-4e8a-945f-41782c13535b",
    "sources_info" : {
        "browsers" : [
            {
                "name" : "Chrome",
                "count" : NumberLong(2)
            }
        ],
        "operating_systems" : [
            {
                "name" : "Mac OS X",
                "count" : NumberLong(2)
            }
        ],
        "continent_ids" : [
            {
                "name" : "EU",
                "count" : NumberLong(1)
            }
        ],
        "country_ids" : [
            {
                "name" : "DE",
                "count" : NumberLong(1)
            }
        ], …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

在mongoose中为朋友模式建模?

当我在其他用户配置文件上时,如何建模我的mongoose模式以获取这三个按钮?

  1. 添加好友
  2. 要求

我的用户架构

const schema = new Mongoose.Schema({
  firstName: { type: String, default: '', trim: true },
  lastName: { type: String, default: '', trim: true },
}, { timestamps: true })
Run Code Online (Sandbox Code Playgroud)

我无法为此找到正确的建模......还请在建模后建议聚合...

mongoose mongodb node.js mongodb-query aggregation-framework

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