【问题标题】:How to enable loose type search in MongoDB [duplicate]如何在 MongoDB 中启用松散类型搜索 [重复]
【发布时间】:2015-05-21 04:19:47
【问题描述】:

我在 MongoDB 中插入了一个文档,例如:

db.test.insert({date:20150101});

当我尝试使用db.test.find({date:"20150101"}) 搜索时(带双引号的日期字符串),没有返回任何结果。

只有当我使用db.test.find({date:20150101}) 时,它才会返回一个结果。看来 MongoDB 会严格比较日期值。

有什么方法可以用双引号或数字版本搜索它?

【问题讨论】:

  • 20150101 是指 2015 年 1 月 1 日吗?
  • @codeofnode 是的。我想知道您是否可以帮助我做两件事:[1] 使用字符串类型的日期或数字类型的日期搜索日期。 [2] 在搜索结果中查找日期的范围。
  • for [1] 参考我的答案,我没有得到你的答案 [2].. 你在说什么范围
  • @codeofnode 谢谢,我不太明白 [1] 是如何工作的,但我稍后会弄清楚。对于 [2],因为我们可能会得到多个结果(我的日期搜索示例可能不正确,因为它似乎已被确定为一天,但它可能会在小时和分钟处有所不同,或者我们可能会使用 $gt $ lt etcs,所以让我以其他字段为例,我们说字段“价格”,我们搜索所有大于某个值的价格),我怎样才能得到这些结果的范围?
  • 据我想象,您确实需要编写脚本而不是仅仅触发命令,在找到结果后只需找到最低价格和最高价格并打印结果。您可以参考docs.mongodb.org/manual/tutorial/… 了解如何在 mongo db 中编写脚本

标签: mongodb double-quotes


【解决方案1】:

我会将返回的结果转换为一个字符串,然后用你最喜欢的编程语言将它与给定的值进行比较。

请注意,在{date:20150101} 中,该值实际上是整数而不是日期。

【讨论】:

  • 谢谢,现在,我无法控制原始数据(存储在MongoDB中的文档是其他人的)。好的,让我们忘记当前的数据问题,假设我可以控制数据并且我现在可以重新开始,我应该如何处理(将其存储为 Date 类型?)日期数据,我可能需要在未来。
  • mongodb中的日期格式参考this question。如果它解决了您的问题,请考虑接受我的回答:)
  • 好吧,你能告诉我你如何将返回结果转换成字符串吗?我不知道如何在 MongoDB 中做到这一点
【解决方案2】:

你可以触发这样的查询

mongo test --eval "function convert(d){  return new Date(d.substring(0,4)+'/'+d.substring(4,6)+'/'+d.substring(6,8)); }; var c = db.test.find({ a : convert('20150101') }); while(c.hasNext()){ printjson(c.next());  }"

只需将“20150101”作为convert 调用的参数替换为您想要的字符串日期

【讨论】:

    猜你喜欢
    • 2012-03-07
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2011-09-05
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多