我需要查询一个没有到期日[expires](不存在)或到期日在2/2/14之后的帐户的文档。为此,我的mongodb查询为:

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

我在使用正确的 Mongoose .or() .and() .exists()链时遇到麻烦,如何将其转换为 Mongoose ?

谢谢!

最佳答案

使用相同的语法或多或少与Shell中的语法没有关系。它仍然是javascript,只是没有shell帮助器。

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用法的示例。对于 Mongoose ,值得一看的是documentation查询。

动态语言有一种更本地化的方法来定义用于查询等的对象结构。因此,大多数人都喜欢使用它们。

07-24 17:44
查看更多