在mongoDB中删除数组字段大小小于3的文档

lov*_*esh 5 mongodb mongodb-query

我有一个名为mongoDB的集合col,其文档看起来像这样

{
  {
    intField:123,
    strField:'hi',
    arrField:[1,2,3]
  },

  {
    intField:12,
    strField:'hello',
    arrField:[1,2,3,4]
  },

  {
    intField:125,
    strField:'hell',
    arrField:[1]
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我想从集合col中删除哪些size数组字段小于2的文档.

所以我写了一个看起来像这样的查询

db.col.remove({'arrField':{"$size":{"$lt":2}}})
Run Code Online (Sandbox Code Playgroud)

现在这个查询没有做任何事情.我检查过db.col.find(),它返回所有文件.这个查询有什么问题吗?

Joh*_*yHK 6

使用MongoDB 2.2+,您可以在条件对象键中使用数字索引来执行此操作:

db.col.remove({'arrField.2': {$exists: 0}})
Run Code Online (Sandbox Code Playgroud)

这将删除任何至少没有3个元素的文档arrField.


Sea*_*lly 5

从以下文档$size:

您不能使用$ size来查找一系列大小(例如:具有多于1个元素的数组).

如果你想尝试这种事情,文档建议维护一个单独的大小字段(在这种情况下,arrFieldSize)与数组中的项目数.