如何从Mongodb/mongoose中对象内部的数组中删除元素

如何从Mongodb/mongoose中对象内部的数组中删除元素,mongoose,Mongoose,以下是“对话”系列文档的结构 { "_id" : ObjectId("553778c0d3adab10206060db"), //conversation id "messages" : [ { "from" : ObjectId("5530af38576214dd3553331c"), "_id" : ObjectId("553778c0d3adab10206060dc"),//message id

以下是“对话”系列文档的结构

{
    "_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
}
每个文档都包含“messages”数组,而“messages”数组又包含作为数组元素的messages对象。每个对象都有一个数组

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

我想从“参与者”数组(存在于“消息”数组的消息对象中的“参与者”数组)中删除一个特定元素。 我试过这个密码

var query = { _id: mongoose.Types.ObjectId(req.conversation.id), 'messages._id':req.params.messageId};
Conversation.findOneAndUpdate(query, {$pull: {'participants' : participant_id}}, function(err, data){})
但它正在从外部“参与者”数组中删除对象元素。 请帮我把这件事做完

谢谢

检查mongo,查询如下:

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

这将从匹配的
消息
数组中删除给定的
参与者
对象。希望这对你有帮助,你应该把它变成猫鼬

在文档中,
消息
中的两个元素都包含相同的
\u id
参与者
对象。是相同的元素还是两个元素包含不同的元素?抱歉@yogesh我没有收到您的问题好的,您的
消息
元素在两个元素中是否包含相同的
\u id
,以及相同的
参与者
对象?否@yogesh。这是不同的