2016-11-10 89 views
1

我有一個members領域Conversation貓鼬模型:

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

我想用1名或更低成員刪除對話。 目前,我不喜歡這樣寫道:

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

我想知道,如果貓鼬/ MongoDB的支持類似如下(不工作):

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

感謝

回答

0

$sizeMongoDB documentation

$ size不接受數值範圍。要根據具有不同數量元素的 字段來選擇文檔,請創建一個計數器字段,在將元素添加到字段時,您可以增加計數器字段。

查詢不能使用查詢的$ size部分的索引,儘管查詢的其他部分可以使用索引(如果適用) 。


適應您的瑪

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

刪除的情況下

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

當您在添加,不要忘了在nbMembers上加+1($inc)