MONGOOSE 使用字符串查找文档 (LIKE %SQL)

Posted

技术标签:

【中文标题】MONGOOSE 使用字符串查找文档 (LIKE %SQL)【英文标题】:MONGOOSE find a document using a string (LIKE %SQL) 【发布时间】:2018-06-14 08:39:24 【问题描述】:

我想使用集合中包含的日期字段查找文档

//Document Exemple: MODEL : MY_EVENT

event_time_produce: '2018-01-03T11:00:00.201Z',
event_name : 'show'

我想查找所有以'2018-01-03T11:00:'开头的文档

我想忽略 Millesecobde & ISOtype ..etc 的部分

就像在 SQL 中一样:

SELECT * from MY_EVENT where event_time_produce LIKE '2018-01-03T11:00:%'

我试过了,但没用(猫鼬)

MY_EVENT.find(event_time_produce : 
                        $regex: new RegExp('^2018-01-03T11:00:00.*$')
                    )
         .exec(....)

简单的搜索工作:

MY_EVENT.find(event_time_produce : '2018-01-03T11:00:00.201Z')
         .exec(....) 

但我想从 2018 年 1 月 3 日 11:00:XX 获取所有文件

无论秒数,只需验证日期、小时和分钟即可。

【问题讨论】:

Mongoose.js: Find user by username LIKE value的可能重复 我看过这篇文章,但不适合我!可能是日期和时间? 不,没关系。您确定将日期作为字符串存储在 mongodb 中吗? 日期以 Date 类型存储! 那是你的问题。将它们更改为字符串以使正则表达式起作用。 【参考方案1】:

这不是你的正则表达式的问题吗?

在您的 SQL 示例中,您有 2018-01-03T11:00:% 在 mongo 上您有 ^2018-01-03T11:00:00.*$11:00: 之后的另外两个零)

更新: 如果您在实际文档中的数据是 ISODate 而不是常规字符串,最好使用如下范围: event_time_produce:$gte:ISODate("2018-01-03T11:00:00.000+0000"),$lte:ISODate("2018-01-03T11:00:59.999+0000")

【讨论】:

我在 Mongoose 中搜索了一个函数,就像 SQL 中的 DATEPART() 函数! SELECT * FROM record WHERE (DATEPART(yy, register_date) = 2009 AND DATEPART(mm, register_date) = 10 AND DATEPART(dd, register_date) = 10) 使用日期范围怎么样? (更新了我的答案以反映这一点)

以上是关于MONGOOSE 使用字符串查找文档 (LIKE %SQL)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mongoose 查找子文档字段部分匹配给定条件的文档

使用 Mongoose 查找子文档字段部分匹配给定条件的文档

如何使用另一个集合 mongoose 查找子查询文档

Mongoose - 查找具有最大计数的文档

我无法使用 Mongoose 在 MongoDB 中保存或查找文档

在 mongoose 中查找文档并获取特定部分