當用戶向我的node.js
應用程序提交內容時,他提出了四件事:start_date,他的facebook用戶名,文本內容和一個標誌,內容應該是每個人都可見還是隻能看到他的Facebook好友。我的mongodb/mongoose查詢條件排除了它們自己。你能幫我解決這個問題嗎?
當用戶獲取內容時,他可以從其他用戶獲取公共內容,並從他的Facebook好友處獲得內容(即使他們僅爲他們的朋友提交了內容)。
我創建了一個mongoose
查詢,在這種情況下可以正常工作。我不喜歡這樣寫道:
var query = Test.find({})
if(startDate != undefined) {
var startDate = new Date(req.param('startDate'));
query = query.where('updated_at').gte(startDate);
}
if (friends != undefined) {
var friendsSplitted = friends.split(",");
for(var i=0; i<friendsSplitted.length; i++) {
query = query.or([{ 'facebook_username': friendsSplitted[i] }]);
}
}
query = query.where('hidden').equals(false);
if (publicFlag != undefined && publicFlag === "true") {
query = query.or({friends_only: false});
}
有了上面的代碼,當只有從他的朋友含量用戶查詢(可能是私人或公共),他POST
小號startDate
,他friends
陣列,標誌hidden
設置爲false並且publicFlag
設置爲false。查詢構造:
貓鼬:test.find({的updated_at:{ '$ GTE':新的日期( 「星期六,2011年10月15日 00:00:00 GMT」)},隱藏的:假的, '$或':[{facebook_username: 'XXXXXXXXXXXXXX'},{facebook_username: 'YYYYYYYYYYYYYYY'}]}){ 領域:未定義}
用戶還可以查詢不僅是他的朋友(私有或公共)內容,而且還有其他人的公開內容。爲此,他POST
s startDate
,他的數組friends
,標記hidden
設置爲false,publicFlag
設置爲true。查詢構造:
貓鼬:test.find({的updated_at:{ '$ GTE':新的日期( 「星期六,2011年10月15日 00:00:00 GMT」)},隱藏的:假的, '$或':[{facebook_username: 'XXXXXXXXXXXXXX'},{facebook_username: 'YYYYYYYYYYYYYYY'},{ friends_only:假}]}){字段:未定義}
上面的代碼工作正常。
我想添加另一種情況,當用戶可以獲取具有特定主題標籤的內容時。 基本上,當用戶選擇此選項時,他可以看到其他用戶的內容,只包括這些井號標籤。那個內容雖然是他的fb朋友帖子(私人或公共)和其他人的帖子(這是公開的)。
對於我想過加入這個條件,我原來node.js
代碼:
if (hashtagsInput != undefined) {
var hashtags = hashtagsInput.split(",");
for(var i=0; i<hashtags.length; i++) {
query = query.or([{ 'hashtags': hashtags[i] }]);
}
}
但這種方法不能正常工作。
當用戶想取他的朋友(私人和公共)內容和其他的公共內容 - 但只有一個包含主題標籤的一個 - 他POST
小號startDate
,他friends
陣列,標誌hidden
集爲假,publicFlag
設置爲true,並且他的數組爲hashtags
。當他這樣做時,它會創建一個查詢:
貓鼬:測試。find({updated_at:{'$ gte':new Date(「Sat,2011年10月15日 00:00:00 GMT」)},'$ or':[{hashtags:'test1'},{hashtags:'test2 ' },{facebook_username: 'XXXXXXXXXXXX'},{facebook_username: 'YYYYYYYYYYYYYYYYYY'},{friends_only:假}],刪除:假}){ 字段:未定義}
基本上我想限制一般只查詢具體的井號標籤。
此查詢不返回正確的數據。現在我不是mongoose
專家,我昨天花了幾個小時試圖弄清楚,但我認爲問題是它返回的數據要麼包含標籤之一,要麼是其作者是我的Facebook朋友之一。
我想修復此查詢,以便 - 如果用戶名爲POST
s標籤 - 它會獲取其朋友和公衆的公開和私密內容,但只會包含那些至少包含其中一個主題標籤的內容。當用戶不提供標籤時 - 它應該像現在這樣工作,獲取他朋友的所有私人和公共內容,並公開所有人。
您能否幫我修復我的node.js
代碼,以便它創建正確的mongoose
查詢?
謝謝普尼特,它工作得很好,我只有一個小問題 - 如果我想傳遞另一個參數,例如,用戶名並在此查詢中使用它,我必須通過添加以下內容來修改它:'if(username!= undefined){query。$ and.push({「username」:username})}?或者是否有其他特定的方式,比如'.equals'等? – user3766930
你需要使用query。$ and.push({「username」:username}),你也可以用其他方式做到這一點,但我不是帶有貓鼬方法的家庭,我還建議你直接更改mongodb查詢,你可以進行更復雜的查詢。 如果您發現答案有用,請接受它作爲正確答案。 :) –
巨大的感謝您的幫助Puneet!最後一個問題 - 你寫了關於更改MongoDB查詢的問題,你是什麼意思?你能給我一些小例子嗎?在評論什麼改變什麼?謝謝! – user3766930