【发布时间】:2015-03-16 03:01:28
【问题描述】:
该集合有一个文档:
{
"_id" : ObjectId("54b513933aca242d9915a787"),
"carriers" : [
{
"carrier" : ObjectId("54b54d223aca242d9915a788"),
"carryingInterval" : {
"from" : ISODate("2013-12-31T23:00:00.000Z"),
"to" : null
}
}
]
}
我想制定一个标准,就是寻找一个特定的载体和范围。 carryingInterval 的 from 和 to 字段可以是 Date 对象或 null . null 值表示 +/- 无穷大。
我的标准是:
{
carriers: {
$elemMatch: {
carrier: ObjectId('54b54d223aca242d9915a788'),
carryingInterval: {
$or: [
{
from: {$lt: Date()},
to: null
}
]
}
}
}
}
此查询无法运行并出现以下错误消息:
无法规范化查询:BadValue 未知运算符:$or
好的,我尝试了其他标准,例如:
{
carriers: {
$elemMatch: {
carrier: ObjectId('54b54d223aca242d9915a788'),
$or: [
{
"carryingInterval.from": {$lt: Date()},
"carryingInterval.to": null
}
]
}
}
}
它运行时没有任何结果,但是 from 字段小于文档中的“现在”。如果我从标准中跳过 from 字段,我会得到它。
在topicWill Berkeley 中说
$or 应该在顶层
但在我的第二个标准中,$or 运算符不在顶层,即低于 $elemMatch 运算符,它可以工作。
我不明白这种行为。请给我解释一下!谢谢! :)
【问题讨论】:
标签: mongodb mongodb-query