【发布时间】:2015-04-05 22:28:36
【问题描述】:
我想知道这是否可能与 Mongo/Meteor 相关:
我有一个集合,所有文档都包含一个 createdAt 字段和一个状态字段(true/false 布尔值)。我想在列表中向用户显示此集合,但仅包含匹配的文档:
if status is false AND if status is true only those before 14 days ago.
我可以在我的模板助手中按照我想要的方式分别根据两个字段过滤列表,但是如何在客户端将这两个限制组合到一个集合中?
更新:所以我想我正在寻找 Patrick 提到的 or 声明,但它似乎不起作用。
var date = new Date(+new Date - 12096e5);
return Things.find({$and: [
{ $or : [ { status : false } ] },
{ $or : [ { status : true } , { createdAt: {"$gte": date} } ] }
]},
{sort:{createdAt:-1}});
Doh,我有 and 和 or 倒退!我希望将符合这两个和条件中的任何一个的项目退回,并且以下似乎有效。
var date = new Date(+new Date - 12096e5);
return Things.find({$or: [
{ $and : [ { status : false } ] },
{ $and : [ { status : true } , { createdAt: {"$gte": date} } ] }
]},
{sort:{createdAt:-1}});
【问题讨论】:
-
这里不是
OR吗?您正在寻找这两个语句的结合,对吗? -
是的,我想我正在寻找
or...falseortrue within last 14 days -
您的解决方案看起来是正确的,除了两点:您不需要
$ands,如果您想要 14 天之前的日期,我认为您的意思可能是$lte。 -
为什么我不需要
$ands?对于第一个我可以看到不需要它,但第二组需要匹配两者,逗号就足够了吗?而且我只需要过去 14 天内的那些,所以从 14 天前到今天,可以排除之前的那些。 -
mongodb 有一个隐含的AND 用于逗号分隔的表达式。