6

我有一个名为的 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]
  }
}

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

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

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

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

4

4 回答 4

8

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

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

这将删除任何在arrField.

于 2013-09-03T04:20:04.230 回答
5

从文档中$size

您不能使用 $size 查找大小范围(例如:具有超过 1 个元素的数组)。

如果您想尝试这种事情,文档建议维护一个单独的大小字段(在本例中为 arrFieldSize)和数组中的项目数。

于 2012-05-03T22:05:02.063 回答
4

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

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

db.col.find({
  "$or": [
    { "arrField": {"$exists" => false} },
    { "arrField": {"$size" => 1} },
    { "arrField": {"$size" => 0} }
  ]
})
于 2012-06-27T13:58:03.710 回答
0

以下应该工作

db.col.remove({$where: "this.arrField.length < 2"})
于 2019-04-04T03:43:06.880 回答