Json $gte和$lte,带数字打印isn';t在mongodb中正常工作
我正在尝试检索在某个范围内至少有一个条目为'cov.res.timestamp'的文档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': {
$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的简单范围不起作用吗?