truncate()

语法

db.collectionspace.collection.truncate()

truncate 会删除集合内所有数据(包括普通文档和 LOB 数据),但不会影响其元数据。与 remove 需要按照条件筛选目标不同,truncate 会直接释放数据页,在清空集合(尤其是大数据量下)数据时效率比 remove 更加高效。

Note: 如有自增字段,truncate后字段序列值将会重置。

参数描述

返回值

无返回值,出错抛异常,并输出错误信息,可以通过getLastErrMsg()获取错误信息或通过getLastError()获取错误信息码。

错误

错误码

示例

  • 我们在集合 foo.bar 中插入了普通数据和 LOB 数据。通过快照查看其数据页使用情况:

    1. > db.snapshot(SDB_SNAP_COLLECTIONS) ;
    2. {
    3. "Name": "foo.bar",
    4. "Details": [
    5. {
    6. "GroupName": "datagroup",
    7. "Group": [
    8. {
    9. "ID": 0,
    10. "LogicalID": 0,
    11. "Sequence": 1,
    12. "Indexes": 1,
    13. "Status": "Normal",
    14. "TotalRecords": 10000,
    15. "TotalDataPages": 33,
    16. "TotalIndexPages": 7,
    17. "TotalLobPages": 36,
    18. "TotalDataFreeSpace": 41500,
    19. "TotalIndexFreeSpace": 103090
    20. }
    21. ]
    22. }
    23. ]
    24. }
  • 上例中可以看到其中数据页为33,索引页为7,LOB 页为36。下面执行 truncate 操作。

    1. > db.foo.bar.truncate()
  • 再次通过快照查看数据页使用情况,可以查看除索引页为2(存储了索引的元数据信息)外,其余数据页已经全部被释放了。

    1. > db.snapshot(SDB_SNAP_COLLECTIONS) ;
    2. {
    3. "Name": "foo.bar",
    4. "Details": [
    5. {
    6. "GroupName": "datagroup",
    7. "Group": [
    8. {
    9. "ID": 0,
    10. "LogicalID": 0,
    11. "Sequence": 1,
    12. "Indexes": 1,
    13. "Status": "Normal",
    14. "TotalRecords": 0,
    15. "TotalDataPages": 0,
    16. "TotalIndexPages": 2,
    17. "TotalLobPages": 0,
    18. "TotalDataFreeSpace": 0,
    19. "TotalIndexFreeSpace": 65515
    20. }
    21. ]
    22. }
    23. ]
    24. }