2013-12-17 65 views
1

在我的應用程序中,我正在查詢事件。我必須選擇符合以下要求的事件。查詢事件:檢查對象數組中是否存在特定項目

1.價值的user_id不應該等於當前用戶的ID

2.「取消」的自定義字段應該是假的

3.自定義字段「參與者」應包含當前用戶的ID

在其中cancelled屬性將具有一個布爾值和participants是一個數組第包含一些對象。

participants array: 

participants : [{"userID":"52a15bebf172080g3g02abcd","nickname":"Anand"},{"userID":"58t85eryjc2fx3489nx4m90d","nickname":"Midhun"}]; 

我寫了下面的用於獲取事件

function getUsers(user){ 
    Cloud.Events.query({ 
    per_page: 1000, 
    where : { 
     "cancelled" : false, 
     "user_id":{"$ne":user.id}, 
     //TODO: here I need to get the participants whose userID is equal to user.id 
     } 
    }, function(e){ 
     if (e.success) { 
      alert('Success:\n' + 'Count: ' + e.events.length); 
     } else { 
      alert('Error:\n' + 
       ((e.error && e.message) || JSON.stringify(e))); 
     } 
    }); 
} 

如何檢查user.id是否存在於參與者對象數組?

UPDATE

我嘗試以下

where : { 
    "cancelled" : false, 
    "participants.userID" : user.id, 
    "user_id":{"$ne":user.id}, 
} 

但返回0應該返回1

+0

'participants.userID:user.id'? – WiredPrairie

+0

@WiredPrairie:感謝您的回覆。我嘗試過,但沒有奏效。 – Anand

+0

您需要爲您的問題添加完整的文檔示例。在一個非常簡單的測試中,我測試了它,並且我建議的語法工作正常。 – WiredPrairie

回答

1

大量的研究,我找到了答案後。我改變了where子句如下

where : { 
    "cancelled" : false, 
    "participants" :{ "$elemMatch" : { "userID" : user.id }} 
    "user_id":{"$ne":user.id}, 
} 

完整代碼如下

function getUsers(user){ 
    Cloud.Events.query({ 
     per_page: 1000, 
     where : { 
      "cancelled" : false, 
      "participants" :{ "$elemMatch" : { "userID" : user.id }} 
      "user_id":{"$ne":user.id}, 
     } 
    }, function(e){ 
     if (e.success) { 
      alert('Success:\n' + 'Count: ' + e.events.length); 
     } else { 
      alert('Error:\n' + 
       ((e.error && e.message) || JSON.stringify(e))); 
     } 
    }); 
} 

This link幫我解決這個問題。

相關問題