根据数组字段$ size和比较运算符删除文档

时间:2016-11-10 11:23:46

标签: mongodb mongoose

我有Conversation猫鼬模型,其中members字段:

const Conversation = new Schema({
    ...
    members: [{
        type: Schema.Types.ObjectId,
        ref: 'User'
    }]
    ...
});

我想删除1个或更少成员的对话。 目前我这样做:

Conversation.remove({    
    $or: [
        { members: { $size: 1 } },
        { members: { $size: 0 } }
    ]
});

我想知道mongoose / mongodb是否支持以下内容(无法正常工作):

Conversation.remove({    
    members: {
        $size: { $lte: 1 }
    }
});

由于

1 个答案:

答案 0 :(得分:0)

来自$size的{​​{3}}。

  

$ size不接受值范围。选择基于的文档   具有不同数量的元素的字段,创建一个计数器字段   在向字段添加元素时增加。

     

查询不能使用索引来查询查询的$ size部分   如果适用,查询的其他部分可以使用索引。

适应你的标志

const Conversation = new Schema({
    ...
    members: [{
        type: Schema.Types.ObjectId,
        ref: 'User'
    }]
    nbMembers: {
     type: Number,
     select: false,
    },
    ...
});

删除案例

  Conversation.remove({ 
    nbMembers: {
       $lte: 1, 
    },
  });

_id中添加members时,请勿忘记在+1 MongoDB documentation

上添加nbMembers