2015-10-21 217 views
0

我正在处理嵌套数据的猫鼬查询。数据猫鼬查询

例子:

{ 
    name : 'blah', 
    en : { 
    state : 'published', 
    pubDate : '2015-10-19-22T13:44:16.387Z' 
    }, 
    es : { 
    ... 
    }, 
    ... 
} 

我想查询与发布日期(pubDate)于今天或空白早些时候的所有对象的日期。我的架构有嵌套的语言(enes等)

我的应用程序有一个locals对象存储一些有用的值pubDate:为此,我有locals.today映射到今天的日期以及locals.lang映射到用户当前选择的语言。



使用猫鼬,我可以使用其中的个别参数查询:

.where(locals.lang + '.pubDate').lt(locals.today) 

似乎我无法做到的是使用或查询操作,因为它不承认当地人反对在里面。

.or([ 
    { locals.lang + '.pubDate' : { '$lt' : locals.today } }, 
    { locals.lang + '.pubDate' : '' } 
]) 

我可以证实,这句法作品,如果我硬编码(的'en.pubDate'代替locals.lang + '.pubDate')的语言部分,但是这不是我的应用程序一个可行的解决方案。此外,我试图设置一个新的变量(var publicationdate = locals.lang + '.pubDate'),但这也不起作用。看起来语法不喜欢为属性名称设置变量。



有谁知道我可以在猫鼬的or查询语法中使用的变量? 感谢

回答

2

使用bracket notation来动态创建对象的属性,你可以设置的查询对象如下:

var firstObj = {}, 
    secondObj = {}; 

firstObj[locals.lang + '.pubDate'] = { '$lt' : locals.today }; 
secondObj[locals.lang + '.pubDate'] = ''; 

然后您可以为使用:

.or([ firstObj, secondObj ]) 
+0

真棒,很高兴它为你工作得很好:-) – chridam