如何删除剩余的ObjectId?

时间:2017-06-11 07:32:58

标签: node.js mongodb mongoose

问题是:

我有一组照片架构和喜欢架构,而且在照片中有一个类似于ObjectIds的数组,名为likeArray,用于填充喜欢收集的数据。

但是当我从likes集合中删除like时,likeArray中的ObjectId仍然存在。

我试图在likeArray中找到like._id的索引并使用likeArray.splice(index,1)但是无法工作。

有人知道解决方案吗?

这是照片架构:

var Photo = mongoose.model('Photo', new mongoose.Schema({
    photo_url: String,
    photo_description: String,
    user:{
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'user'
        },
        username: String,
        profile_photo: String
    },
    comments: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'comment'
        }
    ],
    likes: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'like'
        }
    ],
    created_at: {type: Date, default: Date.now}
}));

这里是Like架构:

var Like = mongoose.model('Like', new mongoose.Schema({
    user_id: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'user'
    },
    photo_id: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'photo'
    },
    created_at: {type: Date, default: Date.now}
}));

1 个答案:

答案 0 :(得分:1)

您可以使用$pull运算符代替拼接。以下是它在mongo shell中的外观。

db.likes.remove({_id: like_oid});
db.photos.update({likes: like_oid}, {$pull: {likes: like_oid}}, { multi: true });