在mongodb中使用$dateFromString和$lt及$lge进行查询
我试图从mongodb返回日期范围的一些记录,并尝试使用以下查询来查询字段StartDate的收集测试:在mongodb中使用$dateFromString和$lt及$lge进行查询,mongodb,mongodb-query,Mongodb,Mongodb Query,我试图从mongodb返回日期范围的一些记录,并尝试使用以下查询来查询字段StartDate的收集测试: db.test.aggregate([ { $match: { "StartDate": { "$gte": [ { "$dateFromString": { "dateString": "2
db.test.aggregate([
{
$match: {
"StartDate": {
"$gte": [
{
"$dateFromString": {
"dateString": "2021-03-01T00:00:00.0000000Z"
}
}
],
"$lt": [
{
"$dateFromString": {
"dateString": "2021-04-01T00:00:00.0000000Z"
}
}
]
}
}
}
])
上面的查询没有返回任何内容,但我确信在日期之间有一些数据。你知道我错过了什么吗?谢谢 由于
$dateFromString
是一个聚合管道操作符,因此需要在表达式条件中进行匹配,并且表达式具有不同的and语法
第二个选项:您可以使用
$dateFromString
的可选运算符
根据新要求更新: 字段
activities.dateOfActivity
是一个数组,它需要遍历循环并检查每个日期的条件
迭代$map
数组的循环,并将两个条件都放在其中,如果两个条件都满足,则返回true,否则返回false活动.dateOfActivity
将检查布尔值的返回数组是否具有任何true条件,然后返回文档$anyElementTrue
您使用的是什么编程语言?只需在JS
{StartDate:{$gte:new Date(“2021-03-01T00:00:00.0000000”),$lt:new Date(“2021-04-01T00:00:00.0000000”)}
$match
使用查询运算符,为了使用聚合运算符,它们需要位于$expr
表达式中,我以前使用过JS,但是Azure Logic应用程序无法识别JS,所以我必须找到另一种方法来实现这一点,这就是为什么我尝试使用纯Mongo查询$dateFromString来首先将字符串转换为日期并进行比较,但它不起作用。嗨,Joe,我将$match更改为$expr,并得到了错误“无法识别的管道阶段名称:$expr”。我正在对Cosmos DB(mongo API)运行查询。CosmosDB可能不支持它?ohh“$StartDate”是MyCollection中的DateField?例如,我的日期字段名为SystemCreatedDate,我是否应该将“$StartDate”替换为“SystemCreatedDate”“?StartDate
是集合中的一个日期字段,需要$is在表达式中引用该字段。您可以在条件中使用$SystemCreatedDate
而不是$StartDate
。因此,如果该字段位于数组中,我应该将其更改为“$MyArray.MyDateField”,对吗?在CosmosDB上运行时,我遇到“未知运算符:$expr”错误。看起来$expr当前不受支持..可能在cosmosdb中不受支持。我刚刚看到了这个,如果您得到任何信息,请遵循这个。
db.test.aggregate([
{
$match: {
$expr: {
$and: [
{
$gte: [
"$StartDate",
{
"$dateFromString": {
"dateString": "2021-03-01T00:00:00.0000000Z"
}
}
]
},
{
$lt: [
"$StartDate",
{
"$dateFromString": {
"dateString": "2021-04-01T00:00:00.0000000Z"
}
}
]
}
]
}
}
}
])
db.test.aggregate([
{
$match: {
$and: [
{
"$expr": {
$anyElementTrue: {
$map: {
input: "$activities.dateOfActivity",
in: {
$and: [
{
"$gte": [
"$$this",
{
"$dateFromString": {
"dateString": "2021-03-01T00:00:00.0000000Z"
}
}
]
},
{
"$lt": [
"$$this",
{
"$dateFromString": {
"dateString": "2021-04-20T00:00:00.0000000Z"
}
}
]
}
]
}
}
}
}
}
]
}
}
])