我有mongo文件:
{
id:1
time:[
1,
2,
10
]
}
{
id:2
time:[
1,
4,
8,
10
]
}
我想查找所有文档,其时间介于3到5之间或介于7或9之间(文档ID为2)。我不知道这是怎么回事。
我试试:
mongo.find( $or : [{time:{$gte:3, $lte:5}}, {time:{$gte:7, $lte:9}}] )
和mongo返回id为1和2的文档,但我需要时间为[4,8]的id2。
如何将条件应用于数组的每个元素,但不是整个数组?
P.S。大小数组“时间”可能不同
答案 0 :(得分:3)
如果您使用'time'数组作为另一个存储阵列的占位符,那么之前使用elemMatch的注释应该可以帮助您,因为这应该可以应对其他数字搜索,例如考试分数。
但是,如果您正在使用它来处理日期/时间等,那么您最好使用unix时间戳进行存储,因为这是通过整数完成的,很容易在mongodb中搜索和存储,并且支持很容易对于大多数编程语言而言。 (例如:php:mktime()和DateTime :: getTimestamp())。
答案 1 :(得分:2)
尝试使用$elemMatch运算符:
mongo.find({time:{$elemMatch: {$gte:3,$lte:5}}})
喜欢:
mongo.find(
{
$or: [
{time:{$elemMatch: {$gte:3,$lte:5}}},
{time:{$elemMatch: {$gte:7,$lte:9}}}
]
}
)