我很难找回我想要的文档和子文档。 给定以下示例,我希望在某日期大于2018-07-09的情况下返回MyArray.data。我已经看到了许多示例,但似乎没有一个适合我。 我们正在使用v3.4。
我尝试过
db.getCollection('TestCol').find({"MyArray.data.somedate": {"$gt": Date("2018-07-09")}})
但没有返回任何内容。
这是我正在测试的文档
{
"_id" : ObjectId("5b46770ca6476fde4407a8df"),
"MyArray" : [
{
"data" : {
"somedate" : "2018-07-10 16:34"
}
},
{
"data" : {
"somedate" : "2018-07-09 15:01"
}
}
]
}
更新 我也尝试过:
db.getCollection('TestCol').aggregate([{$match: {"MyArray.data.somedate": {"$gte": Date("2018-07-09")}}}])
答案 0 :(得分:0)
您的文档不包含日期对象,而是包含字符串。并且该字符串未格式化为正确的ISODate字符串或其他字符串。您需要将传递给Mongo查询的日期转换为与数据库中字段相同的格式,以匹配日期。
要进行转换,您可以按以下方式使用date-fns format function:
const format = require("date-fns/format")
const dateForQuery = format(new Date("2018-07-09"), 'YYYY-MM-DD HH:mm')
const data = await db.collection.find({"MyArray.data.somedate": {"$gt": dateForQuery}})
另一方面,您的代码中有一些错误的做法:
new Date()
通话。但是请记住,它始终在您所在的时区。如果您始终在服务器的时区中处理时间,那么最好不要传递时间部分。