我正在处理一个处理嵌套数据的mongoose查询。
数据示例:
{
name : 'blah',
en : {
state : 'published',
pubDate : '2015-10-19-22T13:44:16.387Z'
},
es : {
...
},
...
}
我想查询发布日期(pubDate
)早于今天或空白的所有对象的日期。我的架构有pubDate
嵌套语言(en
,es
等。)
我的应用程序有一个locals
对象,用于存储一些有用的值:为此我有locals.today
映射到今天的日期以及映射到locals.lang
的{{1}}用户'目前选择的语言。
使用mongoose我可以使用where:
.where(locals.lang + '.pubDate').lt(locals.today)
我似乎无法完成的是使用或查询运算符,因为它无法识别其中的locals对象。
.or([
{ locals.lang + '.pubDate' : { '$lt' : locals.today } },
{ locals.lang + '.pubDate' : '' }
])
如果我对语言部分('en.pubDate'
而不是locals.lang + '.pubDate'
进行硬编码),我可以确认此语法有效,但这不是我的应用程序中可行的解决方案。此外,我尝试设置一个新变量(var publicationdate = locals.lang + '.pubDate'
),但这也不起作用。似乎语法不喜欢为属性名称设置变量。
有谁知道如何在mongoose中使用or
查询语法中的变量?
感谢
答案 0 :(得分:2)
使用 bracket notation
动态创建对象属性,您可以按如下方式设置查询对象:
var firstObj = {},
secondObj = {};
firstObj[locals.lang + '.pubDate'] = { '$lt' : locals.today };
secondObj[locals.lang + '.pubDate'] = '';
然后您可以将其用作:
.or([ firstObj, secondObj ])