2015-10-21 220 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