删除Mongodb中Sub Document Collection的部分内容

时间:2016-03-30 16:11:57

标签: mongodb mongodb-query

我正在尝试从集合中删除一部分子文档。

尝试过(以及其他许多人):

 db.collection.remove( {'Segments': {$gte: '20150612141038' }} )
 db.collection.remove( { 'Segments.$' : {$gte: '0150612141038' }} )
 db.collection.deleteMany( { 'Segments.$' : {$gte: '0150612141038' }} )
 db.collection.deleteOne( { 'Segments.$' : {$eq: '0150612141038' }} )

只是无法弄清楚我做错了什么......

{
  "_id" : ObjectId("56e32c5147e030bc0a000035"),
  "Date" : "2015-06-12",
  "UnitID" : "5",
  "Segments" : {
      "20150612141037" : {
        "Parameters" : {
          "647" : "0",
          "649" : "16",
          "653" : "0",
          "655" : "0",
          "656" : "0",
          "658" : "98",
          "664" : "447.0486",
          "666" : "442.7083",
          "677" : "122.8004",
    }
  },
     "20150612141038" : {
       "Parameters" : {
         "658" : "96",
         "664" : "451.3889",
         "666" : "447.0486",
         "677" : "122.7892"
    }
  },
    "20150612141039" : {
       "Parameters" : {
         "658" : "44",
         "664" : "442.7083",
         "677" : "122.8004",
         "704" : "1"
    }
  },

1 个答案:

答案 0 :(得分:0)

首先,我认为您的查询是错误的。 如果您对mongoShell尝试此查询:

db.bios.find({'Segments': {$gte: '20150612141038'}})

您没有任何输出,因为20150612141038是文档而不是字段。也许您可以重构架构,将20150612141038设置为字段,将Segments设置为文档数组:

{
  "_id" : ObjectId("56e32c5147e030bc0a000035"),
  "Date" : "2015-06-12",
  "UnitID" : "5",
  "Segments" : [
        {
            "segmentId" : "20150612141037", 
            "Parameters" : {
                "647" : "0", 
                "649" : "16", 
                "653" : "0", 
                "655" : "0", 
                "656" : "0", 
                "658" : "98", 
                "664" : "447.0486", 
                "666" : "442.7083", 
                "677" : "122.8004"
            }
        }, 
        {
            "segmentId" : "20150612141038", 
            "Parameters" : {
                "658" : "96", 
                "664" : "451.3889", 
                "666" : "447.0486", 
                "677" : "122.7892"
            }
        }, 
        {
            "segmentId" : "20150612141039", 
            "Parameters" : {
                "658" : "44", 
                "664" : "442.7083", 
                "677" : "122.8004", 
                "704" : "1"
            }
        }
    ]
}

然后您可以使用$pull运算符从Segments数组中删除字段Segments.segmentId具有特定值的文档:

db.collection.update({},
               {$pull:{Segments:{"segmentId":{$eq:"20150612141039"}}}},
               { multi: true}
               )