Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mongodb中使用$dateFromString和$lt及$lge进行查询_Mongodb_Mongodb Query - Fatal编程技术网

在mongodb中使用$dateFromString和$lt及$lge进行查询

在mongodb中使用$dateFromString和$lt及$lge进行查询,mongodb,mongodb-query,Mongodb,Mongodb Query,我试图从mongodb返回日期范围的一些记录,并尝试使用以下查询来查询字段StartDate的收集测试: db.test.aggregate([ { $match: { "StartDate": { "$gte": [ { "$dateFromString": { "dateString": "2

我试图从mongodb返回日期范围的一些记录,并尝试使用以下查询来查询字段StartDate的收集测试:

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
    迭代
    活动.dateOfActivity
    数组的循环,并将两个条件都放在其中,如果两个条件都满足,则返回true,否则返回false
  • $anyElementTrue
    将检查布尔值的返回数组是否具有任何true条件,然后返回文档

您使用的是什么编程语言?只需在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"
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            }
          }
        }
      ]
    }
  }
])