【发布时间】:2015-11-17 00:37:01
【问题描述】:
我知道 SO 中有一个类似的问题,但我的问题与 Find values in mongdb 略有不同。我正在尝试一个酒店预订应用程序。在这里,我存储有关预订房间的日期的信息,这意味着房间在所有其他日期都可用。我正在与mongodb 和python 合作。
我正在使用$nin 函数。我有一个称为备用日期的选项,用户可以在其中提供另一个日期。我只想显示一天的空房情况,即如果第一个日期有空房,那么搜索应该停止,如果没有的话,它应该继续到下一个日期,如果有的话给出结果。
这个解决方案给出了所有给定日期的结果。 solution of Find values in mongdb
存储的数据是
{
"_id" : ObjectId("5645f0443f32df13e0dc786e"),
"Booked Date" : ["28-9-2015","29-9-2015","1-10-2015"],
"Room No.": "101"
},
{
"_id" : ObjectId("5645f0c73f32df062064a0f6"),
"Booked Date" : ["29-9-2015","1-10-2015"],
"Room No.": "102"
},
{
"_id" : ObjectId("5645f0c73f32df06205874f8"),
"Booked Date" : ["29-9-2015","1-10-2015","2-10-2015"],
"Room No.": "103"
},
我是这样查询的
db.booking.find({"Date": { '$nin':[Date]}},{"_id": False,"Booked Date": False})
这里我输入["1-10-2015","2-10-2015"]
所以当我得到结果时,我不知道房间在哪一天有空。
有什么办法可以解决这个问题。
当我运行这段代码时
db.booking.find({"Date": { '$nin':["1-10-2015","2-10-2015"]}},{"_id": False,"Booked Date": False})
我得到结果
{"Room No.": "101"},
{"Room No.": "102"}
但我不知道房间在哪一天有空。在上述情况下,它仅适用于2-10-2015。
那么有没有办法说它在2-10-2015上可用。
另外一种情况:
db.booking.find({"Date": { '$nin':["1-10-2015","2-10-2015", "3-10-2015"]}},{"_id": False,"Booked Date": False})
这里可以在2-10-2015 & 3-10-2015 获得,但它应该只显示第一个可用日期,即2-10-2015。
输出应该和上面一样:
{"Room No.": "101"},
{"Room No.": "102"}
【问题讨论】:
-
您的问题难以理解,请出示预期结果。
-
@user3100115 请检查编辑
-
@TonyRoczz 我以为你需要第一个结果.. 但我想如果在那个日期有空的话,每个日期你只需要一个房间。对吗?
-
@TonyRoczz 如果是这样的话.. 我真的怀疑在 mongo 中可能有一个查询可以做到这一点.. 但你可以在你的 python 代码中反驳它.. 只需返回房间以及他们的日期可用.. 并剥离同一日期可用的房间.. :)
-
"Room No": 103呢?结果应该是什么?3-10-2015?对吗?
标签: python mongodb mongodb-query pymongo aggregation-framework