【问题标题】:finding different documents in same collection in mogodb-nodejs driver在 mongodb-nodejs 驱动程序中查找同一集合中的不同文档
【发布时间】:2020-05-16 23:10:09
【问题描述】:

以下是详细信息: 调度集合

"_id" : ObjectId("5e27fd3da42d441fe8a89580"),
        "dispatched" : false,
        "dispatchableItems" : [
                {
                        "_id" : ObjectId("5e26be2cc13b7149d0a95110"),
                        "itemCategory" : "Accessories",
                        "itemName" : "key chain",
                        "city" : "mumbai",
                        "itemCode" : "AKCME1",
                        "itemCount" : 20,
                        "fixeditemCount" : 2
                },
                {
                        "_id" : ObjectId("5e26be2cc13b7149d0a95111"),
                        "itemCategory" : "Handbags",
                        "itemName" : "kalinz purple long chain handbag",
                        "city" : "mumbai",
                        "itemCode" : "HKHE1",
                        "itemCount" : 5,
                        "fixeditemCount" : 1
                }
        ],
        "weekday" : "FR",
        "toBeDispatchedBy" : ObjectId("5e2696c683201450a8ddb1dc"),
        "toBeDispatchedTo" : ObjectId("5e2696f883201450a8ddb1df"),
        "toBeDispatchedOn" : ISODate("2020-02-01T18:30:00Z")

并且有多个文档,一个文档是

"_id" : ObjectId("5e27fd3da42d441fe8a89087"),
        "dispatched" : true,
        "dispatchableItems" : [
                {
                        "_id" : ObjectId("5e26be2cc13b7149d0a00997"),
                        "itemCategory" : "Accessories",
                        "itemName" : "key chain",
                        "city" : "mumbai",
                        "itemCode" : "AKCME1",
                        "itemCount" : 30,
                        "giftCount" : 2
                },
                {
                        "_id" : ObjectId("5e26be2cc13b7149d0a95678"),
                        "itemCategory" : "Handbags",
                        "itemName" : "kalinz purple long chain handbag",
                        "city" : "mumbai",
                        "itemCode" : "HKHE1",
                        "itemCount" : 10,
                        "giftCount" : 1
                }
        ],
        "weekday" : "FR",
        "toBeDispatchedBy" : ObjectId("5e2696c683201450a8ddb1dc"),
        "toBeDispatchedTo" : ObjectId("5e2696f883201450a8ddb1df"),
        "toBeDispatchedOn" : ISODate("2020-01-25T18:30:00Z")

1:我需要出示 ISODate("2020-02-01T18:30:00Z") 和 ISODate("2020-01-25T18:30:00Z") 的文件(即 D-7 最后周数据) 2:我会从 req.body {"toBeDispatchedBy","toBeDispatchedto"} 得到这个 这是我尝试过的

db.orders.aggregate([
    {'$match': {'toBeDispatchedBy': ObjectId("5e2696c683201450a8ddb1dc"),
            "toBeDispatchedto": ObjectId("5e2696f883201450a8ddb1df"),
           '$or': [
                {
                    'toBeDispatchedOn': ISODate("2020-02-01T18:30:00Z")
                }, {
                    'toBeDispatchedOn': ISODate("2020-01-25T18:30:00Z")
                }]}}])

但我只获取 ISODate("2020-01-25T18:30:00Z") 的文件 此外,这是我真正需要的那种回应:

"dispatchDetails": [
                   {   "toBeDispatchedOn": ISODate("2020-02-01T18:30:00Z")
                        "itemCategory" : "Accessories",
                        "itemName" : "key chain",
                        "city" : "mumbai",
                        "itemCode" : "AKCME1",
                        "itemCount" : 30,
                        "giftCount" : 2,
                       "lastWeekData":[{"toBeDispatchedOn": ISODate("2020-01-25T18:30:00Z")
                                        "itemCount" : 30,
                                        "giftCount" : 2}]
                },
                {
                        "itemCategory" : "Handbags",
                        "itemName" : "kalinz purple long chain handbag",
                        "city" : "mumbai",
                        "itemCode" : "HKHE1",
                        "itemCount" : 10,
                        "giftCount" : 1,
                        "lastWeekData":[{"toBeDispatchedOn": ISODate("2020-01-25T18:30:00Z")
                                        "itemCount" : 30,
                                        "giftCount" : 2}]
                }
        ]

这个集合中有很多文档我需要根据“toBeDispatchedBy”、“toBeDispatchedto”来显示 currentDay(toBeDispatchedOn) 和 D-7(toBeDispatchedOn-7) 日的文档,我将从 req 获得.body,我需要在nodejs中实现这个查询

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    考虑到您使用的是mongoose,您可以这样做:

    const { toBeDispatchedBy, toBeDispatchedTo } = req.body;
    const result = await Order.find({
      toBeDispatchedBy,
      toBeDispatchedTo,
      toBeDispatchedOn: {
        $in: [new Date("2020-02-01T18:30:00Z"), new Date("2020-01-25T18:30:00Z")]
      }
    });
    

    对于简单的查找操作,您不需要使用聚合。

    【讨论】:

    • 它会给我我期望的那种回应吗?如果你能帮助我产生那种回应我已经在我的问题中发布了一个回应样本——而且查询正在获取mongoshell 中只有 ISODate("2020-01-25T18:30:00Z") 日期的文档,但 nodejs @technophyle 中的数组为空
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2021-09-23
    • 2020-12-12
    • 2012-09-02
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多