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

问题描述 投票:5回答:4

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

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

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

  {
    intField:125,
    strField:'hell',
    arrField:[1]
  }
}

现在我想从集合col中删除文件,其中数组字段的size小于2。

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

db.col.remove({'arrField':{"$size":{"$lt":2}}})

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

mongodb mongodb-query
4个回答
5
投票

$size的文档:

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

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


6
投票

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

db.col.remove({'arrField.2': {$exists: 0}})

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


4
投票

请注意,对于某些查询,仅使用(n)或条件列出您想要或排除的所有计数是可行的。

在您的示例中,以下查询将为所有文档提供少于2个数组条目:

db.col.find({
  "$or": [
    { "arrField": {"$exists" => false} },
    { "arrField": {"$size" => 1} },
    { "arrField": {"$size" => 0} }
  ]
})

0
投票

以下应该有效

db.col.remove({$where: "this.arrField.length < 2"})
© www.soinside.com 2019 - 2024. All rights reserved.