我需要找出特定时间之间匹配的结果,除了mongo中的日期

时间:2016-06-06 06:14:49

标签: php mongodb laravel

We are in 2016

}

我有一个带有上述记录的集合,有两个日期对象:

{ "_id" : ObjectId("5754f6b904896f7e0c8b45e5"), "coordinates" : [ 76.7033471, 30.7104586 ], "delivery_delay" : NumberLong(0), "delivery_radius_in_km" : 10, "delivery_slot_duration" : NumberLong(30), "description" : "wgwhsh", "image" : "item_5751680404896f7e0c8b45dd_15755.png", "image_thumbnail" : "item_5751680404896f7e0c8b45dd_15755.png", "item_id" : "5751680404896f7e0c8b45dd", "pick_up_or_delivery" : "Delivery", "price_in_primary_currency" : 300, "primary_currency" : "INR", "quantity_available" : NumberLong(6), "quantity_delivered" : NumberLong(10), "quantity_ordered" : NumberLong(100), "recurring" : true, "repeat_every_friday" : true, "repeat_every_monday" : true, "repeat_every_saturday" : true, "repeat_every_sunday" : true, "repeat_every_thursday" : true, "repeat_every_tuesday" : true, "repeat_every_wednesday" : true, "restriction" : [ "Vegetarian", "Beef free" ], "sale_event_latitude" : "30.7104586", "sale_event_longitude" : "76.7033471", "seller_address_id" : "5751142604896f7e0c8b45c8", "seller_designation_as_shown_to_buyers" : "good selle", "seller_rating" : 4, "seller_user_id" : "575110eb04896f7e0c8b45bf", "title" : "anamak", "type" : [ "Indian" ], "pickup_date_delivery_and_time_from" : ISODate("2016-06-06T04:05:54Z"), "pickup_delivery_date_and_time_to" : ISODate("2016-06-14T04:06:54Z"), "cut_off_time" : ISODate("2016-06-10T04:06:54Z"), "status" : true, "updated_at" : ISODate("2016-06-06T04:06:17.017Z"), "created_at" : ISODate("2016-06-06T04:06:17.017Z")

1->pickup_date_delivery_and_time_from

以上字段与2->pickup_delivery_date_and_time_to一起存储。现在我想查询获取timestamps小于"pickup_date_delivery_and_time_from(only time)"04:05:14Z应大于{的所有结果{1}}从上方字段中保留日期。

只有时间才能引起关注。

我必须将上述字段与当前时间匹配。

任何帮助!!!

2 个答案:

答案 0 :(得分:0)

最好的方法是与日期保持一个单独的时间字段以获得最佳效果。

如果您无法更改架构,并且您必须使用所拥有的架构,则有两种方法。

  1. 使用$where
  2. db.mycollection.find({$where : function() { return <your matching criteria>} })

    最后的手段。这会给性能带来影响。

    1. 使用汇总

      { "_id" : 1, ISODate("2014-01-01T08:15:39.736Z") } db.mycollection.aggregate( [ { $project: { year: { $year: "$date" }, month: { $month: "$date" }, day: { $dayOfMonth: "$date" }, hour: { $hour: "$date" }, minutes: { $minute: "$date" }, seconds: { $second: "$date" }, milliseconds: { $millisecond: "$date" }, dayOfYear: { $dayOfYear: "$date" }, dayOfWeek: { $dayOfWeek: "$date" }, week: { $week: "$date" } } } ] )

    2. 并根据您的需要使用其他管道运营商进行匹配。

      退房 $whereaggregation with date

答案 1 :(得分:0)

linker >> general

我已从两个日期开始分钟,开始小时和开始秒,但没有运气确定我将要提供的时间将与100%的准确度匹配。

我找到了我所做的解决方案----&gt;&gt;&gt;&gt;&gt;&gt;&gt;

我使用mongo $ hour and minute使用$ minute和相同的秒钟获得了一小时。我添加了所有的秒数,并且也从必须匹配的日期做同样的事情。现在我比较输入的秒数数据库中保存的总日期秒。

因为秒数从当前晚上的0点开始。