查询事件:检查对象数组中是否存在特定项

时间:2013-12-17 09:19:46

标签: mongodb titanium cloud titanium-mobile

在我的应用程序中,我正在查询事件。我要选择符合以下要求的活动。

1。 user_id的值不应等于当前用户的ID

2。自定义字段“已取消”应为false

第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?

更新

我尝试了以下

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

但返回0.它应该返回1.

1 个答案:

答案 0 :(得分: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帮助我解决了这个问题。