我需要查询没有过期[过期](不存在)或过期日期是2/2/14之后的帐户的文档。为此,我的mongodb查询是:
db.events.find({ _account: ObjectId("XXXX"),
$or: [
{expires: {$gt: ISODate('2014-02-02')}},
{expires: {$exists: false}}
]
});
我在使用正确的猫鼬.or()
.and()
.exists()
链接时遇到问题,如何将其转换为Mongoose?
谢谢!
答案 0 :(得分: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
});
或者,您正在使用其他帮助程序来构建查询:
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的查询值得一看。
动态语言有一种更原生的方法来定义用于查询等的对象结构。所以大多数人都喜欢使用它们。