2014-06-25 75 views
0

在找'.find'所有文檔,'.where'的用戶名是'.in'的到:數組,要麼upVoted:真'.or' noVote:真實的,全部由排名下降

這裏來分類是一個例子文檔結構:

to: [String], 
voting: { 
    upVoted: Boolean, 
    noVote: Boolean, 
    downVoted: Boolean 
}, 
rank: Number 

此查詢工作,但如何將這個在Mongoose .dot notation寫成:

Story.find({ 
    $and: [ 
      { to: { $in: [ 'user1' ] } }, 
     { $or: [{ 'voting.upVote': true }, { 'voting.noVote': true }] } 
    ] 
}, function (err, stories) { 

FYI我工作的正確語法排序此

回答

1

原始查詢可以變得更簡單,因爲你不需要用$和(這是隱含在MongoDB中)。此外,如果您只查找ṫo陣列中的一個用戶,那麼您也不需要$ in操作符。

{ 
    to: 'user1', 
    $or: [{ 'voting.upVote': true }, { 'voting.noVote': true }] 
} 

使用貓鼬查詢API:

var query = Story.find(); 
query.where('to', 'user1'); 
query.or({ 'voting.upVote': true }, { 'voting.noVote': true }); 
query.exec(function (err, doc) { 
    if (err) ... 
}); 

或者,如果你正在尋找一個以上的用戶則更換:

query.where('to', 'user1'); 

有:

query.where('to').in(['user1', 'user2']); 
+0

感謝這..結果只是返回的任何原因upVote:true,不包括noVote:true? – StackThis

+0

也會聚集在sort([['rank','descending']])中進行排序嗎? – StackThis

+0

欣賞點符號答案..我現在使用.aggregate雖然,爲了排序.. – StackThis