我有以下mongoose架构(我删除了一些不必要的位):
var VoteSchema = new Schema({
voter: String,
val: {type:Number, max:1, min:-1},
voted_at: { type: Date, default: Date.now },
comments: [{type:String, trim:true}]
});
var LexicalEntrySchema = new Schema({
label:{type:String,trim:true, index:true},
images:[{
image_uri: {type:String,trim:true},
description: String,
votes:[ { type: Schema.ObjectId, ref: 'Vote'} ]
}],
});
我想删除所有词条中所有图像中的所有投票。怎么可以这样做?
答案 0 :(得分:0)
您需要进行三次查询:
LexicalEntry.find
。使用{images.votes: 1}
作为投影参数。LexicalEntry.update
并更新步骤1中找到的所有匹配文档。{$set: {"images.votes": []}}
。Votes.remove
,其中包含您在步骤1中收集的所有ID。正如您可能猜到的,这是次优的。您应该利用Mongo的功能来嵌入文档:
var LexicalEntrySchema = new Schema({
label:{type:String,trim:true, index:true},
images:[{
image_uri: {type:String,trim:true},
description: String,
votes: [ VoteSchema ]
}]
});
通过执行以下操作插入新的投票:someEntryDocument.images[0].votes.push({voter: ..., val: ...})
。
通过执行以下操作删除投票:someEntryDocument.images[0].votes = []
。
Mongoose的人口特征最适合许多人的关系。