MongoDB。将嵌入的数组拆分为块

MongoDB。将嵌入的数组拆分为块,mongodb,Mongodb,我想实现这个结构。 正如你所看到的,我有一个注释数组,它被100分割成块。我应该如何运行db.sample.update,因此如果块长度小于100,它将被插入到这个块中,如果它相等,那么它将创建另一个范围为(100-199)的块,依此类推其他块(200-299)?谢谢。在您的情况下,您正在设置一个条件,如“如果数组长度小于n,则推送新块,否则创建一个新数组并推送新块” 您可以通过两个步骤完成此操作: 尝试查找块元素少于n=3的特定文档 db.getCollection("test001").u

我想实现这个结构。


正如你所看到的,我有一个注释数组,它被100分割成块。我应该如何运行
db.sample.update
,因此如果块长度小于100,它将被插入到这个块中,如果它相等,那么它将创建另一个范围为(100-199)的块,依此类推其他块(200-299)?谢谢。

在您的情况下,您正在设置一个条件,如“如果数组长度小于n,则推送新块,否则创建一个新数组并推送新块”

您可以通过两个步骤完成此操作:

尝试查找块元素少于n=3的特定文档

db.getCollection("test001").update (
  {_id: ObjectId("5b79353e737098b608de3002")},
  {"$push":   {"notes.$[v]": {_id: 6, text: "ok"}  }   },
  {   "arrayFilters": [ {"v.3": {$exists: false}} ]     }
)
这将$push元素{u id:6,text:“ok”},如果chunk(v.3)不存在,那么基本上只有少于3个元素

如果查询失败(因此没有少于3个元素的数组),则必须$push一个新的空数组并再次运行该代码


在我看来,一个原子查询不能完成这个过程,必须是两步过程。

元素200应该发生什么?是否应继续为范围200-299创建新区块?是。我刚刚读了这篇文章:。但我不知道如何实现它。这篇文章很老(2014年),我不确定这是否仍然是一个好方法。仅仅因为它很老?2015年晚些时候MongoDB改变了存储引擎,这就是为什么我担心在那之前写的文章。
db.getCollection("test001").update (
  {_id: ObjectId("5b79353e737098b608de3002")},
  {"$push":   {"notes.$[v]": {_id: 6, text: "ok"}  }   },
  {   "arrayFilters": [ {"v.3": {$exists: false}} ]     }
)