如何使用Mongoose在JSON文件中查找特定数组

时间:2019-04-24 07:37:32

标签: node.js mongodb mongoose

我用猫鼬模式制作了一些复杂的数据。
我想根据特定条件找到它。
这是我通过邮寄发送的数据。

{
    "clientID": "1234",
    "clientOrder": [{
      "cartNumber":0,
      "departure": {
        "pickUpTimeFrom": "2019-02-03T13:00",
        "pickUpTimeto": "2019-02-03T15:00"
      },
      "destination": {
        "pickUpTimeFrom": "2019-02-04T13:00",
        "pickUpTimeto": "2019-02-04T15:00"
      }
    },
    "clientID": "1234",
    "clientOrder": [{
      "cartNumber":1,
      "departure": {
        "pickUpTimeFrom": "2019-02-03T13:00",
        "pickUpTimeto": "2019-02-03T15:00"
      },
      "destination": {
        "pickUpTimeFrom": "2019-02-04T13:00",
        "pickUpTimeto": "2019-02-04T15:00"
      }
    }]
}


我想按日期条件在“ cartNumber:0”中找到一个特定的数组。
因此,我找到了“ cartNumber:0”。
但是,它不会发送任何日期。
而且,我什至无法设定“出发”的“ 2019-02-03”之类的日期条件。
您能帮我输入正确的代码吗?

  const allInform = await Order.find({
      clientOrder: {
        $elemMatch: {
          cartNumber: 0,
        },
      },
    });

1 个答案:

答案 0 :(得分:1)

我不太确定我了解您的架构,因为它存在一些错误, 但是我假设每个客户订单可以有多个购物车,而购物车0不一定在数组的索引0处。 如果这两个假设中的任何一个都不对,则可以简化以下查询。

 let results = await Order.aggregate([
        {
          $unwind: "$clientOrder"
        },
        {
          $match: {
              $and: [{'clientOrder.cartNumber': 0}, 
                   {'clientOrder.destination.pickUpTimeFrom': <DATE OBJECT>}]
           }
        }
        ]);

注意,假设您将日期保存为Date对象,则无法将其查询为字符串。

如果您使用的mongoshell使用ISODate,则它看起来像:ISODate("2018-07-05T07:15:09.703+0000")

如果您使用的是JavaScript,则可以创建一个新的日期对象:new Date(""2018-07-05")

  • 当您的匹配日期必须完全匹配时。