2014-01-30 75 views
3

我需要为一个没有到期[过期](不存在)或到期日期在2/2/14之后的帐户查询文档。要做到这一点,我的MongoDB的查询是:

db.events.find({ _account: ObjectId("XXXX"), 
    $or: [ 
     {expires: {$gt: ISODate('2014-02-02')}}, 
     {expires: {$exists: false}} 
    ] 
}); 

我在用正确的猫鼬.or().and().exists()链接的麻烦,我将如何转换成猫鼬这个?

谢谢!

回答

7

使用相同的语法应该没有问题,或多或少像shell一样。它仍然是JavaScript,没有壳帮助器。

Events.find({ _account: "XXXX", 
    $or: [ 
    {expires: {$gt: Date(2014,02,02)}}, 
    {expires: {$exists: false }} 
}, function(err, events) { 
    if (err) // TODO 
    // do something with events 
}); 

或者正在使用其他助手构建查询:

var query = Events.find({ _account: "XXXX" }); 

query.or(
    {expires: {$gt: Date(2014,02,02)}}, 
    {expires: {$exists: false }} 
); 

query.exec(function(err, events) { 
    if (err) // TODO 
    // do something with events 
}); 

或者其他组合。这些'助手'主要存在于与Java等其他非动态语言进行语法平衡的驱动程序中。如果您喜欢这种方式,并且找不到节点引用,则可以在Java中查找QueryBuilder用法的示例。对于猫鼬而言,值得一看的查询有documentation

动态语言有一个更原生的方法来定义用于查询等这样的对象结构等。因此,大多数人更喜欢使用它们。

+0

啊,太棒了 - 我以为我不得不使用助手,不知道“或”是如何与原来的“发现”一起实施的。我将在今天晚些时候回到办公室时尝试这一点。 – justin

相关问题