我用猫鼬模式制作了一些复杂的数据。
我想根据特定条件找到它。
这是我通过邮寄发送的数据。
{
"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,
},
},
});
答案 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")