【问题标题】:How to Delete an element from the array which is present inside an object in Mongodb/mongoose如何从存在于 Mongodb/mongoose 对象中的数组中删除元素
【发布时间】:2015-04-23 16:28:21
【问题描述】:

这里是集合'conversations'的文档结构

{
    "_id" : ObjectId("553778c0d3adab10206060db"), //conversation id
    "messages" : [
        {
            "from" : ObjectId("5530af38576214dd3553331c"),
            "_id" : ObjectId("553778c0d3adab10206060dc"),//message id
            "created" : ISODate("2015-04-22T10:32:32.056Z"),
            "read" : false,
            "message" : "second object first msg",
            "participants" : [
                ObjectId("5530af38576214dd3553331c"), //participant id
                ObjectId("553777f2d3adab10206060d8")//participant id
            ]
        },
        {
            "from" : ObjectId("5530af38576214dd3553339b"),
            "_id" : ObjectId("553778c0d3adab10206060dc"),//message id
            "created" : ISODate("2015-04-22T10:32:32.059Z"),
            "read" : false,
            "message" : "second object second msg",
            "participants" : [
                ObjectId("5530af38576214dd3553331c"),//participant id
                ObjectId("553777f2d3adab10206060d8")//participant id
            ]
        }
    ],
    "participants" : [
        ObjectId("5530af38576214dd3553331c"),
        ObjectId("553777f2d3adab10206060d8")
    ],
    "__v" : 0
}

每个文档都包含“消息”数组,该数组又包含消息对象作为数组元素。每个对象都有参与者数组。

我有对话 id 、消息 id 、参与者 id。

我想从 'participants' 数组(存在于 'messages' 数组的消息对象中的 'participants' 数组)中删除一个特定元素。 我试过这段代码。

var query = { _id: mongoose.Types.ObjectId(req.conversation.id), 'messages._id':req.params.messageId};
Conversation.findOneAndUpdate(query, {$pull: {'participants' : participant_id}}, function(err, data){})

但它正在从外部“参与者”数组中删除对象元素。 请帮我完成这项工作。

谢谢

【问题讨论】:

  • 在您的文档中,message 中的两个元素都包含相同的 _idparticipants 对象。是相同的元素还是两个元素都包含不同的元素?
  • 对不起@yogesh 我没有收到你的问题
  • 好的,您的message 元素是否在两个元素中包含相同的_id 和相同的participants 对象?
  • 没有@yogesh。不一样

标签: mongoose


【解决方案1】:

查看mongopositional operator,查询如下:

db.conversations.update({
  "_id": ObjectId("553778c0d3adab10206060db"),
  "messages": {
    "$elemMatch": {
      "_id": ObjectId("553778c0d3adab10206060dc")
    }
  },
  "messages": {
    "$elemMatch": {
      "participants": {
        "$in": [ObjectId("5530af38576214dd3553331c")]
      }
    }
  }
}, {
  "$pull": {
    "messages.$.participants": {
      "$in": [ObjectId("5530af38576214dd3553331c")]
    }
  }
})

这会从匹配的message 数组中删除给定的participants 对象。希望这会对您有所帮助,您应该将其转换为猫鼬。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-26
    • 2016-03-16
    • 2020-04-16
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2011-03-14
    • 2020-02-27
    相关资源
    最近更新 更多