标签: aggregation-framework

$ find在数组中的ObjectId

在一个ObjectIds数组而不仅仅是一个ObjectId的字段上执行$ lookup的语法是什么?

示例订单文档:

{
  _id: ObjectId("..."),
  products: [
    ObjectId("..<Car ObjectId>.."),
    ObjectId("..<Bike ObjectId>..")
  ]
}
Run Code Online (Sandbox Code Playgroud)

不工作查询:

db.orders.aggregate([
    {
       $lookup:
         {
           from: "products",
           localField: "products",
           foreignField: "_id",
           as: "productObjects"
         }
    }
])
Run Code Online (Sandbox Code Playgroud)

期望的结果

{
  _id: ObjectId("..."),
  products: [
    ObjectId("..<Car ObjectId>.."),
    ObjectId("..<Bike ObjectId>..")
  ],
  productObjects: [
    {<Car Object>},
    {<Bike Object>}
  ],
}
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

如何使用MongoDB过滤子文档中的数组

我有像这样的子文档数组

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 1
        },
        {
            "a" : 2
        },
        {
            "a" : 3
        },
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我可以过滤子文档> 3

我期待下面的结果

{
    "_id" : ObjectId("512e28984815cbfcb21646a7"),
    "list" : [
        {
            "a" : 4
        },
        {
            "a" : 5
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用$elemMatch但返回数组中的第一个匹配元素

我的查询:

db.test.find( { _id" : ObjectId("512e28984815cbfcb21646a7") }, { 
    list: { 
        $elemMatch: 
            { a: { $gt:3 } 
            } 
    } 
} ) …
Run Code Online (Sandbox Code Playgroud)

filter mongodb mongodb-query aggregation-framework

81
推荐指数
3
解决办法
9万
查看次数

MongoDB中的$ unwind运算符是什么?

这是我与MongoDB的第一天,所以请跟我一起轻松:)

我无法理解$unwind操作员,也许是因为英语不是我的母语.

db.article.aggregate(
    { $project : {
        author : 1 ,
        title : 1 ,
        tags : 1
    }},
    { $unwind : "$tags" }
);
Run Code Online (Sandbox Code Playgroud)

我想项目操作员是我能理解的(就像SELECT是,不是吗?).但是,$unwind(引用)为每个源文档中的展开数组的每个成员返回一个文档.

这是一个JOIN吗?如果是,如何的结果$project(有_id,author,titletags字段)可以用比较tags阵列?

注意:我从MongoDB网站上采用了这个例子,我不知道tags数组的结构.我认为这是一个简单的标签名称数组.

mongodb aggregation-framework

77
推荐指数
5
解决办法
5万
查看次数

MongoDB的$ in子句是否保证订单

使用MongoDB $in子句时,返回文档的顺序是否始终对应于数组参数的顺序?

mapreduce mongoose mongodb mongodb-query aggregation-framework

73
推荐指数
6
解决办法
2万
查看次数

仅返回嵌套数组中匹配的子文档元素

主要集合是零售商,其中包含商店阵列.每个商店都包含一系列优惠(您可以在这家商店购买).这个提供的数组有一系列的大小.(见下面的例子)

现在我尝试找到所有尺寸可用的优惠L.

{
    "_id" : ObjectId("56f277b1279871c20b8b4567"),
    "stores" : [
        {
        "_id" : ObjectId("56f277b5279871c20b8b4783"),
        "offers" : [
            {
                "_id" : ObjectId("56f277b1279871c20b8b4567"),
                "size": [
                    "XS",
                    "S",
                    "M"
                ]
            },
            {
                "_id" : ObjectId("56f277b1279871c20b8b4567"),
                "size": [
                    "S",
                    "L",
                    "XL"
                ]
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过这个查询: db.getCollection('retailers').find({'stores.offers.size': 'L'})

我期待一些像这样的输出:

 {
"_id" : ObjectId("56f277b1279871c20b8b4567"),
"stores" : [
    {
        "_id" : ObjectId("56f277b5279871c20b8b4783"),
        "offers" : [
            {
                "_id" : ObjectId("56f277b1279871c20b8b4567"),
                "size": [
                    "S",
                    "L",
                    "XL"
                ]
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

但我的查询输出还包含与sizeXS,X和M 的不匹配的报价.

我如何强制MongoDB只返回与我的查询匹配的商品? …

mongodb mongodb-query aggregation-framework

58
推荐指数
2
解决办法
6万
查看次数

如何在MongoDB中汇总总和以获得总数?

对于某个带字段的集合,{ wins: Number }我如何使用MongoDB Aggregation Framework获取集合中所有文档的获胜总数?

例:

如果我有3个文件wins: 5,wins: 8,wins: 12分别,我怎么可能使用MongoDB的聚合框架返回的总数,即total: 25.

mongodb aggregation-framework

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

Mongodb Aggregation框架比map/reduce更快吗?

mongodb 2.2中引入的聚合框架是否比map/reduce有任何特殊的性能改进?

如果是,为什么,如何以及多少?

(我已经为自己做过测试了,性能几乎相同)

performance mapreduce mongodb aggregation-framework

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

通过关键字段查找MongoDB集合中的所有重复文档

假设我有一些包含一些文档的集合.这样的事情.

{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":1, "name" : "foo"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":2, "name" : "bar"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":3, "name" : "baz"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":4, "name" : "foo"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":5, "name" : "bar"}
{ "_id" : ObjectId("4f127fa55e7242718200002d"), "id":6, "name" : "bar"}
Run Code Online (Sandbox Code Playgroud)

我想通过"name"字段找到此集合中的所有重复条目.例如,"foo"出现两次,"bar"出现3次.

mapreduce duplicates mongodb aggregation-framework

52
推荐指数
3
解决办法
4万
查看次数

MongoDB在每日分组中聚合

我在mongo中有一些看起来像这样的文档:

{
  _id : ObjectId("..."),
  "make" : "Nissan",
  ..
},
{
  _id : ObjectId("..."),
  "make" : "Nissan",
  "saleDate" :  ISODate("2013-04-10T12:39:50.676Z"),
  ..
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够计算出每天销售的车辆数量.然后,我想要查看今天或者过去七天这样的窗口.

我能用一些丑陋的代码完成日常视图

db.inventory.aggregate(
  { $match : { "saleDate" : { $gte: ISODate("2013-04-10T00:00:00.000Z"), $lt: ISODate("2013-04-11T00:00:00.000Z")  } } } ,
  { $group : { _id : { make : "$make", saleDayOfMonth : { $dayOfMonth : "$saleDate" } }, cnt : { $sum : 1 } } }
)
Run Code Online (Sandbox Code Playgroud)

然后产生结果

{
  "result" : [
    {
      "_id" : {
        "make" : "Nissan", …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

51
推荐指数
2
解决办法
5万
查看次数

MongoDB - $ size的参数必须是一个数组,但类型为:EOO

尝试使用icCube创建MongoDB数据源.我们的想法是将数组的大小作为新字段返回.就像是 :

$project:
{ 
 "people": 1, 
 "Count myFieldArray" : {$size : "$myFieldArray" }
}
Run Code Online (Sandbox Code Playgroud)

但我得到一些记录以下错误:

The argument to $size must be an Array, but was of type: EOO
Run Code Online (Sandbox Code Playgroud)

如果字段为空或不是数组(摆脱错误),是否有一种方法大小为0?

mongodb mongodb-query aggregation-framework iccube

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