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

Mongodb 根据数组字段$size和比较运算符删除文档,mongodb,mongoose,Mongodb,Mongoose,我有一个对话猫鼬模型,带有成员字段: const Conversation = new Schema({ ... members: [{ type: Schema.Types.ObjectId, ref: 'User' }] ... }); 我想删除与1个或更少成员的对话。 目前我是这样做的: Conversation.remove({ $or: [ { members: { $size: 1 }

我有一个
对话
猫鼬模型,带有
成员
字段:

const Conversation = new Schema({
    ...
    members: [{
        type: Schema.Types.ObjectId,
        ref: 'User'
    }]
    ...
});
我想删除与1个或更少成员的对话。 目前我是这样做的:

Conversation.remove({    
    $or: [
        { members: { $size: 1 } },
        { members: { $size: 0 } }
    ]
});
我想知道mongoose/mongodb是否支持以下内容(不工作):

感谢
$size

$size不接受值的范围。根据选择文档的步骤 具有不同元素数的字段,创建一个计数器字段 向字段添加元素时,可以增加值

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


调整您的shema

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

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

当您在
成员中添加
\u id
时,不要忘记从
$size
中添加
+1

$size不接受值的范围。根据选择文档的步骤 具有不同元素数的字段,创建一个计数器字段 向字段添加元素时,可以增加值

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


调整您的shema

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

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

成员
中添加
\u id
时,不要忘记在
nbMembers上添加
+1