你如何在同一个Mongoose.js查询中使用$和$或$?

jus*_*tin 4 javascript mongoose mongodb node.js mongodb-query

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

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

我在使用正确的猫鼬.or() .and() .exists()链接时遇到问题,如何将其转换为Mongoose?

谢谢!

Nei*_*unn 9

使用相同的语法应该没有任何问题,或多或少与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
});
Run Code Online (Sandbox Code Playgroud)

或者,您正在使用其他帮助程序来构建查询:

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
});
Run Code Online (Sandbox Code Playgroud)

或其他组合.这些"助手"主要存在于与其他非动态语言(如Java)进行语法奇偶校验的驱动程序中.如果您喜欢这种方式并且无法找到节点引用,则可以在Java中查找QueryBuilder使用示例.对于mongoose,有一些值得一看的查询文档.

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