我有一个mongo集合,用于存储有关产品的信息,并且具有一个嵌入式阵列,用于按日期存储其可用性。
{
"product_id": "A",
"name": "mountain bicycle",
"cost_per_hour": "$5",
"availability":[
{
"timestamp": ISODate("2018-11-19 18:30:00.000Z"),
"available": true
},
{
"timestamp": ISODate("2018-12-20 18:30:00.000Z")
"available": true
},
{
"timestamp": ISODate("2018-12-21 18:30:00.000Z")
"available": false
}
]
}
我要列出给定日期间隔内所有日期的所有可用产品。
示例:如果我查询ISODate(“ 2018-11-19 18:30:00.000Z”)到ISODate(“ 2018-12-20 18:30:00.000Z”)之间的日期,并且可用:true应该会获得带有“ product_id”:“ A”的产品,因为该产品在日期间隔之间的所有日期都可用。
但是,如果我在ISODate(“ 2018-11-19 18:30:00.000Z”)到ISODate(“ 2018-12-21 18:30:00.000Z”)之间进行查询并可用:true,我应该不会没有任何结果,因为该产品并非在该日期范围内的所有日期都可用。
我尝试使用$ elemMatch,但返回的产品在间隔中给定日期的至少日期中是我不希望的。
请指导。
答案 0 :(得分:1)
要查找数组字段的 all 个通过查询的文档,可以反转查询以查找失败情况(available: false
),然后使用{{3} }仅返回没有发生这种故障情况的文档:
db.test.find({
availability: {$not: {$elemMatch: {
timestamp: {$gte: ISODate("2018-11-19 18:30:00.000Z"),
$lte: ISODate("2018-12-21 18:30:00.000Z")},
available: false
}}}
})
答案 1 :(得分:0)
参考以下文档:
https://docs.mongodb.com/manual/tutorial/query-array-of-documents/
在:
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
您正在寻找的东西类似于:
db.StoreCollection.find( {
"availability": {
"timestamp": ISODate("2018-12-20 18:30:00.000Z")
"available": true
}
})