搜索MongoDB,对于同一个字段,我想排除一些结果

时间:2016-07-30 16:55:34

标签: mongodb search

我搜索所有状态为#34;请求"但我想排除状态为#34; notInterested"。

的所有文件

以下是代码:

getRelationships(){
    return Relationships.find({
        'whoId': Meteor.userId(),
        'status' : 'request',
        'status' : {$ne : 'notInterested'}
    });
}

现在不工作,但我没有错误。

1 个答案:

答案 0 :(得分:1)

在我的下面的样本集中,有三个文档用于" whoId"等于123.其中两个文件的状态为"请求"一个人没有感兴趣"。该查询具有包括特定状态(即请求)和排除状态(即不感兴趣)的条件。

$和运算符可用于实现此目的。如果我正确理解您的问题,此解决方案应该可以解决您的问题。

我的人际关系收集数据:

/* 1 */
{
    "_id" : ObjectId("579e0d1d681b1cf15a897776"),
    "whoId" : "123",
    "status" : "request"
}

/* 2 */
{
    "_id" : ObjectId("579e0d2f681b1cf15a897777"),
    "whoId" : "2321111",
    "status" : "notInterested"
}

/* 3 */
{
    "_id" : ObjectId("579e0d5d681b1cf15a897778"),
    "whoId" : "123",
    "status" : "request"
}

/* 4 */
{
    "_id" : ObjectId("579e0d65681b1cf15a897779"),
    "whoId" : "123",
    "status" : "notInterested"
}

查询: -

db.Relationships.find({whoId : '123', $and : [{status : 'request'}, {status : {$ne : 'notInterested'}}]})

<强>结果: - 请注意,状态“不感兴趣”#39;尚未被选中。

/* 1 */
{
    "_id" : ObjectId("579e0d1d681b1cf15a897776"),
    "whoId" : "123",
    "status" : "request"
}

/* 2 */
{
    "_id" : ObjectId("579e0d5d681b1cf15a897778"),
    "whoId" : "123",
    "status" : "request"
}