【问题标题】:How to remove left-over ObjectId?如何删除剩余的 ObjectId?
【发布时间】:2017-11-12 20:48:11
【问题描述】:

问题是:

我有一组照片架构和喜欢架构,在照片内部有一个名为 likeArray 的类似 ObjectId 数组,用于填充来自喜欢集合的数据。

但是当我从likes 集合中删除一个like 时,likeArray 中那个like 的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}
}));

【问题讨论】:

  • 请将您的方案代码添加到问题中:)
  • 我添加了架构

标签: node.js mongodb mongoose


【解决方案1】:

您可以使用$pull 运算符来代替拼接。这是它在 mongo shell 中的样子。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多