从MongoDB文档中的数组中删除项目时出现问题

时间:2016-09-02 10:42:28

标签: arrays mongodb mongodb-query

我以数组的形式在文档中插入日志项。我将文档大小限制为5MB,以确保文档大小不会增加。

这里一个文档包含一个数组,所有日志项都将存储到数组中。假设我将500 log items of 5 MB大小以数组的形式存储在一个文档中。

当我删除497个日志项时,它显示文档中剩余的3个日志项,但当我尝试从3个日志项中删除其中一个项时,整个文档被删除,我不知道是什么发生。

文档中的数组是否应该具有一些最小数量的数据。

注意:我在应用程序级别限制文档大小。

以下是示例数据:

activityLogDetails:
  [{
  "activityLog": {
    "acctId": 1,
    "info1": {
      "itemName": "-",
      "value": "-"
    },
    "info2": {
      "itemName": "-",
      "value": "-"
    },
    "errorCode": "",
    "internalInformation": "",
    "kind": "Infomation",
    "loginId": "0",
    "opeLogId": "G1_1",
    "operation": "startDiscovery",
    "result": "normal",
    "targetId": "1",
    "timestamp": "1470980265729",
    "undoFlag": "false"
  }
},{
  "activityLog": {
    "acctId": 2,
    "info1": {
      "itemName": "-",
      "value": "-"
    },
    "info2": {
      "itemName": "-",
      "value": "-"
    },
    "errorCode": "",
    "internalInformation": "",
    "kind": "Infomation",
    "loginId": "0",
    "opeLogId": "G1_1",
    "operation": "startDiscovery",
    "result": "normal",
    "targetId": "1",
    "timestamp": "1470980265729",
    "undoFlag": "false"
  }
}, 
etc....]

删除查询:

db.test.remove({activityLogDetails.activityLog.acctId:{$gt:2}})

任何机构都可以告诉我这可能是什么问题吗?

1 个答案:

答案 0 :(得分:1)

您在查询中执行的操作将删除整个记录。

使用$pull尝试以下查询: -

db.test.updateMany(
        {'activityLogDetails.activityLog.acctId':{$gt:2}},
        {$pull:{activityLogDetails:{'activityLog.acctId':{$gt:2}}}})

有关如何使用的更多信息,请参阅$pull