小编Ash*_*shh的帖子

比较同一文档的两个字段

我正在尝试查询一个巨大的 mongo 集合,其中包含大约 50 + 百万条记录。在 mongo 查询中,我只需要几个字段。文档中存在的对象 ID 和 MD5。为此,我做到了

询问 :

db.getCollection('experimental_engine').find({},{"md5":1,"_id":1}) 
Run Code Online (Sandbox Code Playgroud)

结果 :

/* 1 */
{
    "_id" : "5cee41f2ca4e0ebf567ffd1be5cdaf1f",
    "md5" : "1d813cb29082b13efe572e8088f006dd"
}

/* 2 */
{
    "_id" : "fcd79aac0d5c5ebdfd0fa389368ab6f3",
    "md5" : "13a1a6cd5c8f1c5eaf3d409f4d809889"
}


/* 3 */
{
    "_id" : "2a0b42d01892bd9b7368d045a4c7862c",
    "md5" : "2a0b42d01892bd9b7368d045a4c7862c"
}


................
Run Code Online (Sandbox Code Playgroud)

现在,我想同时匹配 "_id" 和 "md5" 并且只得到匹配的值 ( _id = md5) 。

mongo 命令是否支持两个键的匹配值?

请问有什么建议吗?

mongodb mongodb-query aggregation-framework

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

更新深度嵌套的数组 mongodb

我想使用 mongodb 在附件数组中推送一个值。我想使用以下条件更新查询。

_id:ObjectId("5b56bd2f3e18580edc85af73") "cardID": ObjectId("5b56c895d0a04836f71aa776") "commentId":"2"

我想推动附件中的价值,任何帮助将不胜感激

这是一个集合对象:

{
            "_id" : ObjectId("5b56bd2f3e18580edc85af73"),
            "orgId" : "90",
            "createdBy" : "test",
            "name" : "testname",
            "Cards" : [ 
                {
                    "cardID" : ObjectId("5b56c895d0a04836f71aa776"),
                    "cardName" : "test Name",
                    "cardCreated" : "",
                    "reviewer" : "",
                    "priority" : "",
                    "cardPosition" : "",
                    "membersAssigned" : [ 
                        "ggg", 
                        "fff"
                    ],
                    "labels" : [ 
                        "l1", 
                        "l2"
                    ],
                    "description" : "",
                    "attachements" : [],
                    "comments" : [ 
                        {
                            "commentId" : "2",
                            "commentedBy" : "test",
                            "date" : "",
                            "comment" : "Hello world", …
Run Code Online (Sandbox Code Playgroud)

arrays mongodb

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

计算 mongodb 中对象内的键数量

我想知道一场演出中预订了多少个座位。

每个节目文档中都有一个“showTakenSeats”对象。

这是初始数据:

    [
    {
        "_id": "5b658d37692f2e3c881960cb",
        "_MovieId": "5b5835dd86ab401494263861",
        "_TheaterId": "5b3dfeb217bc8c23f0e7ec3f",
        "dateTime": "2018-08-04T14:00:00.000Z",
        "showTakenSeats": {
            "0-0": "5b658f79dd8bb938289e2e0b",
            "0-1": "5b658f79dd8bb938289e2e0b",
            "0-2": "5b658f79dd8bb938289e2e0b"
        },
        "__v": 0,
    },
    {
        "_id": "5b658d4a692f2e3c881960cc",
        "_MovieId": "5b584eb186ab401494263868",
        "_TheaterId": "5b45d269a53b0c05f8959260",
        "dateTime": "2018-08-04T13:00:00.000Z",
        "showTakenSeats": {
            "0-0": "5b65904bdd8bb938289e2e0d",
            "0-1": "5b65904bdd8bb938289e2e0d",
            "0-2": "5b65904bdd8bb938289e2e0d"
        },
        "__v": 0,
    },
    {
        "_id": "5b658fd1dd8bb938289e2e0c",
        "_MovieId": "5b575452478afb72ec65f8f6",
        "_TheaterId": "5b45d219a53b0c05f895925f",
        "dateTime": "2018-08-04T20:00:00.000Z",
        "showTakenSeats": {},
        "__v": 0,
    },
    {
        "_id": "5b6593d80d48d9394877dd09",
        "_MovieId": "5b584eb186ab401494263868",
        "_TheaterId": "5b446a8768db4e2e980723ab",
        "dateTime": "2018-08-05T10:00:00.000Z",
        "showTakenSeats": {},
        "__v": 0,
    },
    {
        "_id": "5b65943b0d48d9394877dd0a",
        "_MovieId": "5b584eb186ab401494263868",
        "_TheaterId": …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb node.js aggregation-framework

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

当未找到 $match 时 $addFields

我是新的 Mongodb 开发人员,我写了 mongodb 聚合。我的字段 lampStatus : "OFF" 是 30 条记录,我使用 "{ $match: {lampStatus : "OFF"}}" 我得到了 30 条记录,但是 ' lampStatus : "OFF" '没有记录我获取了 0 条记录,但如何在上述聚合中获取零值。

db.collection.aggregate([

                  { $match:{'type':'L'}},
                  { $match: {lampStatus : "ON"}},
                  { $group: { _id : null, TotalLights: { $sum: 1 } } },
                  { $project: { _id: 0, TotalLights: 1 } }




              ])
Run Code Online (Sandbox Code Playgroud)

输出:在 0 毫秒内获取 0 条记录

expected outout:"TotalLights" : 0
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb aggregation-framework

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

数组数组的Mongo过滤器数组

我正在尝试过滤数组数组的列表,这是一个结构示例。

{
    "array1": [
    {
        "array2": [
            {
                "array3": [
                    {
                        "sampleId": 1
                    },
                    {
                        "sampleId": 2
                    },
                    {
                        "sampleId": 5
                    }
                ]
            },
            {
                "array3": [
                    {
                        "sampleId": 7
                    },
                    {
                        "sampleId": 8
                    }
                ]
            }
        ]
    },
    {
        "array2": [
            {
                "array3": [
                    {
                        "sampleId": 1
                    }
                ]
            }
        ]
    }
]
}
Run Code Online (Sandbox Code Playgroud)

假设我想过滤掉 sampleId > 2 的所有子文档

这是预期结果的一个例子。

{
"array1": [
    {
        "array2": [
            {
                "array3": [
                    {
                        "sampleId": 1
                    },
                    {
                        "sampleId": 2
                    }
                ]
            }, …
Run Code Online (Sandbox Code Playgroud)

arrays mongodb mongodb-query aggregation-framework

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

MongoDB $lookup 对一个文档的对象数组进行查找

我在网上搜索过,但找不到与我的情况相符的内容。情况是这样的。

我正在使用聚合将一个集合和来自另一个集合的一个文档组合在一起

restaurants.aggregate([
  {
    $match: {
      _id: {
        $in: idList
      }
    }
  },
  {
    $lookup: {
      from: "tags",
      localField: "details.restaurantType",
      foreignField: "details.restaurantType._id",
      as: "types"
    }
  },
  {
    $project: {
      restaurantName: "$details.restaurantName",
      restaurantType: "$details.restaurantType",
      type: {
        $filter: {
          input: "$types",
          as: "type",
          cond: {
            $eq: ["$$type._id", "$details.restaurantType"]
          }
        }
      },
      currency: "$details.currency",
      costPerPax: "$details.costPerPax"
    }
  }
]);
Run Code Online (Sandbox Code Playgroud)

当前结果

我当前结果中的“类型”字段是 [],我需要一个匹配的值

[
    {
        "id": "5c20c7a0036dda80a8baabcc",
        "restaurantName": "Villagio Restaurant Sutera Mall",
        "type": [],
        "currency": "RM",
        "costPerPax": 22,
    },
    {
        "id": "5c20ceb07715216d3c217b7a",
        "restaurantName": "Thai …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js mongodb-query aggregation-framework

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

如何找到数组的长度mongodb

我的数据库具有这种类型的结构。我想查找“ JAN”数组包含的文档数。我正在尝试以不同的方式进行操作,但是没有任何效果。如果有人帮助的话,那会很棒。

 {
            "_id" : ObjectId("5cd8609db20663a19e2c362c"),
            "2017" : {
                "JAN" : [
                    {
                        "SYMBOL" : "20MICRONS",
                        "SERIES" : "EQ",
                        "OPEN" : "33.4",
                        "HIGH" : "34.3",
                        "LOW" : "33",
                    },
                    {
                        "SYMBOL" : "3IINFOTECH",
                        "SERIES" : "EQ",
                        "OPEN" : "5.8",
                        "HIGH" : "5.8",
                        "LOW" : "5.55",
                    },
                    {
                        "SYMBOL" : "3MINDIA",
                        "SERIES" : "EQ",
                        "OPEN" : "11199.9",
                        "HIGH" : "11233",
                        "LOW" : "10861",
                    }
                ]
            }
        }
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

在 MongoDB 中将一天增加到日期

如何在文档中将日期增加 7 天,而无需手动设置日期?

Collection Data:
{
    "_id" : ObjectId("5e302f83edd1fd00125abbf9"),
    "dateTransferred" : 2020-01-26T00:00:00.000+00:00
}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法轻松更新集合:

db.data.updateMany(
  {},
  {
    "$set": { "dateTransferred": new ISODate("2020-02-03T03:34:54Z") }
  }
)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以动态更新它(类似于 DateAdd)

mongodb mongodb-query

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

在 mongodb 聚合中使用 $expr 内部的 $regex

我的文档如下所示

doc = {
    name: 'abc',
    age:20
}
Run Code Online (Sandbox Code Playgroud)

我的查询看起来像

{ $expr: {$and:[{ $gt:[ "$age",  10 ] },
                { $regex:["$name",'ab']}
               ]
          }
} }
Run Code Online (Sandbox Code Playgroud)

但它不起作用并且我收到错误

无法识别的表达式“$regex”

我怎样才能让它发挥作用?

我原来的查询看起来像这样

db.orders.aggregate([{
$match: {}},
{$lookup: {
    from: "orders",
    let: {
        "customer_details": "$customerDetails"
    },
    pipeline: [
        {
            $match: {
                $expr: {
                        $and: [
                                { $or: [
                                                {
                                                $eq: ["$customerDetails.parentMobile","$$customer_details.parentMobile"]
                                                },
                                                {$eq: ["$customerDetails.studentMobile","$$customer_details.parentMobile"]
                                                },
                                                {$eq: ["$customerDetails.studentMobile","$$customer_details.parentMobile"]
                                                },
                                                {$eq: ["$customerDetails.studentMobile","$$customer_details.studentMobile"]
                                                }
                                            ]
                                        },
                                {$eq: ["$customerDetails.zipCode","$$customer_details.zipCode"]},
                                {$eq: ["$customerDetails.address","$$customer_details.address"]}
                        ]
                    }

            }
        }],
    as: "oldOrder"
}
}])
Run Code Online (Sandbox Code Playgroud)

我想用于regex …

regex mongodb mongodb-query aggregation-framework expr

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

使用 UNIX 毫秒时间的 Mongo groupby 月份

我有一个 Mongo 集合,如下所示:

[{
    id: 1,
    timestamp: 1534488870841,
    type: 'deposit'
}, {
    id: 1,
    timestamp: 1534488915119,
    type: 'deposit'
}]
Run Code Online (Sandbox Code Playgroud)

如何查询以列出deposit按月份分组的所有交易。

必须使用timestamp属性(UNIX 毫秒)计算月份。

我可以按如下方式获得存款,但我不确定如何分组:

db.getCollection('transactions').find(
{"type":"deposit"});
Run Code Online (Sandbox Code Playgroud)

编辑:Mongo 3.4 版

mongodb mongodb-query aggregation-framework

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