Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
Json $gte和$lte,带数字打印isn';t在mongodb中正常工作_Json_Mongodb - Fatal编程技术网

Json $gte和$lte,带数字打印isn';t在mongodb中正常工作

Json $gte和$lte,带数字打印isn';t在mongodb中正常工作,json,mongodb,Json,Mongodb,我正在尝试检索在某个范围内至少有一个条目为'cov.res.timestamp'的文档 {'cov.res.timestamp': { $gte: 1571424600, $lte: 1571597580 }} 它列出了不属于此范围的文档,我在这里做错了什么 这是我的样本文件 "cov" : [ { "order" : NumberInt(1), "res" : {

我正在尝试检索在某个范围内至少有一个条目为'cov.res.timestamp'的文档

{'cov.res.timestamp': {
        $gte: 1571424600,
        $lte: 1571597580
      }}
它列出了不属于此范围的文档,我在这里做错了什么

这是我的样本文件

"cov" : [
        {
            "order" : NumberInt(1), 
            "res" : {
                "text" : [
                    "Start the conversation!"
                ], 
                "source" : "watson", 
                "timestamp" : NumberInt(1566020214), 
                "timestamp_hr" : "17-08-2019 05:36:54"
            }
            "res":{},
            "res":{},
]

不确定您试图执行的操作,但默认情况下,条件是错误的mongodb和(s)条件,因此您需要$,或者您创建了一个类型,因此以下是可用的修复选项:

{
  $or: [{
        'cov.res.timestamp': {
          $gte: 1571424600,
          $exists: true,
        },
        'cov.res.timestamp': {
            $lte: 1571597580,
            $exists: true,
          }
        }
      ]
  }
或者你需要

{
     'cov.res.timestamp': {
        $lte: 1571424600,
        $gte: 1571597580
      }
}
布山的回答是对的,我不知怎么错过了阵列:

 db.xxxxx.aggregate(
    [
    // Stage 1
    {
        $unwind: {
            path : "$cov",
            includeArrayIndex : "arrayIndex", // optional
            preserveNullAndEmptyArrays : false // optional
        }
    },
    // Stage 2
    {
        $match:{
            "cov.res.timestamp": {
                $gte:1571597580,
                $lte:1571424600
                }} 
    }
])

不确定您试图执行的操作,但默认情况下,条件是错误的mongodb和(s)条件,因此您需要$,或者您创建了一个类型,因此以下是可用的修复选项:

{
  $or: [{
        'cov.res.timestamp': {
          $gte: 1571424600,
          $exists: true,
        },
        'cov.res.timestamp': {
            $lte: 1571597580,
            $exists: true,
          }
        }
      ]
  }
或者你需要

{
     'cov.res.timestamp': {
        $lte: 1571424600,
        $gte: 1571597580
      }
}
布山的回答是对的,我不知怎么错过了阵列:

 db.xxxxx.aggregate(
    [
    // Stage 1
    {
        $unwind: {
            path : "$cov",
            includeArrayIndex : "arrayIndex", // optional
            preserveNullAndEmptyArrays : false // optional
        }
    },
    // Stage 2
    {
        $match:{
            "cov.res.timestamp": {
                $gte:1571597580,
                $lte:1571424600
                }} 
    }
])

Hi@epsan,正如您所提到的,您希望显示整个文档,其中至少有一个数组元素满足以下条件conv

{'cov.res.timestamp': {
    $gte: 1571424600,
    $lte: 1571597580
  }}
当您在2019年10月18日至20日期间试图获取数据时 通过生成虚拟数据进行测试 查询是正确的,只需交叉检查其他元素res 要获得唯一的订单匹配条件,我建议使用聚合

    db.xxxxx.aggregate(
    [
    // Stage 1
    {
        $unwind: {
            path : "$cov",
            includeArrayIndex : "arrayIndex", // optional
            preserveNullAndEmptyArrays : false // optional
        }
    },
    // Stage 2
    {
        $match:{
            "cov.res.timestamp": {
                $gte:1571424600,
                $lte:1571597580
                }} 
    }
    ])

Hi@epsan,正如您所提到的,您希望显示整个文档,其中至少有一个数组元素满足以下条件conv

{'cov.res.timestamp': {
    $gte: 1571424600,
    $lte: 1571597580
  }}
当您在2019年10月18日至20日期间试图获取数据时 通过生成虚拟数据进行测试 查询是正确的,只需交叉检查其他元素res 要获得唯一的订单匹配条件,我建议使用聚合

    db.xxxxx.aggregate(
    [
    // Stage 1
    {
        $unwind: {
            path : "$cov",
            includeArrayIndex : "arrayIndex", // optional
            preserveNullAndEmptyArrays : false // optional
        }
    },
    // Stage 2
    {
        $match:{
            "cov.res.timestamp": {
                $gte:1571424600,
                $lte:1571597580
                }} 
    }
    ])

嗨@Black Mamba,谢谢你的回复,解决方案对我不起作用。如果指定范围(GTE<E)内至少有一个cov.res.timestamp字段,我想获取所有文档,并且我需要逻辑and条件。您尝试了第一个吗?你不能只花$就去想你的代码在做什么,怎么可能有些东西大于10,而小于1。我认为第一个块应该解决您的问题。是的,我已经尝试过了,它的列表文档没有指定时间戳。但它不是同时应用两种逻辑吗。。。我想它会评估它,因为时间戳条目应该大于或小于给定的值,这实际上是一个范围。这里的时间戳是一个unxtimestamp(10月18日-10月20日),它列出了一个在这些日期中没有时间戳的文档。如果我不知道,请原谅,我是mongodb的新手。所以你想在18-20之间还是18-20之后?嗨@Black Mamba,谢谢你的回复,解决方案对我不起作用。如果指定范围(GTE<E)内至少有一个cov.res.timestamp字段,我想获取所有文档,并且我需要逻辑and条件。您尝试了第一个吗?你不能只花$就去想你的代码在做什么,怎么可能有些东西大于10,而小于1。我认为第一个块应该解决您的问题。是的,我已经尝试过了,它的列表文档没有指定时间戳。但它不是同时应用两种逻辑吗。。。我想它会评估它,因为时间戳条目应该大于或小于给定的值,这实际上是一个范围。这里的时间戳是一个unxtimestamp(10月18日-10月20日),它列出了一个在这些日期中没有时间戳的文档。如果我不知道,请原谅,我是mongodb的新手。所以你想在18-20之间还是18-20之前?这已经成功提取了相关文件,谢谢。但是总体文档数量增加了,我能做点什么吗?不改变json文档格式和文档数量?这已经成功地提取了相关文档,谢谢。但是总体文档数量增加了,我能做些什么来不改变json文档格式和文档数量吗?有人能帮我理解为什么带$gte和$lte的简单范围不起作用吗?有人能帮我理解带$gte和$lte的简单范围不起作用吗?