我们如何使用$或使用这样的$ where子句?
此查询应始终返回所有记录(因为2015年的日期),但它不会返回任何内容。
在某些部分,它可以正常工作,但在尝试应用$或者Date或$ where时,它无法正常工作。
感谢Sammaye将我以前的版本修复到以下版本(但仍然没有工作):
db.turnys.find({
$or:[
{ start:{
$lte:new Date("2015-03-31T09:52:29.338Z")
} },
{ $where:"this.users.length == this.seats" }
]
});
如何完成预期的$或?
以下是turnys集合的示例:
db.turnys.find({
$or:[
{ start:{
$lte:new Date("2015-03-31T09:52:29.338Z")
} },
{ $where:"this.users.length == this.seats" }
]
});
谢谢!
答案 0 :(得分:0)
问题是$or
不能那样工作,实际上你需要的是:
db.turnys.find({
$or:[
{ start:{
$lte:new Date("2015-03-31T09:52:29.338Z")
} },
{ $where:"this.users.length == this.seats" }
]
});
现在将创建一个包含两个子句的$or
查询。 $or
数组的每个元素都被归类为$and
ed子句。
答案 1 :(得分:0)
当我在other question上引用您时,应避免使用$where
运算符 ,如下所示。
再次显示你应该做的是"分配"文档中的total_users
值,使用$ inc运算符进行更新。但是你的"查询"应该使用.aggregate()
:
db.collection.aggregate([
{ "$project": {
"gId": 1,
"start": 1,
"alloc": { "$eq": [ "$total_users", "$seats" ] }
}},
{ "$match": {
"$or": [
{ "alloc": 1, },
{ "start": { "$lte": new Date("2015-03-31T09:52:29.338Z") } }
]
}}
])
甚至可能使用"数组大小"在MongoDB中提到的更多最近版本(仍将在撰写时发布)中提到的表单。
但也要"澄清"你需要确保你的"测试"操作实际上是有效的。