0

我有一个 mongoDB 集合,其中包含一个数组字段,该字段表示用户所属的列表。

user { 
  screen_name: string
  listed_in: ['list1', 'list2', 'list3', ...] //Could be more than 10000 elements (I'm aware of the BSON 16MB limits)
}

我正在使用 *listed_in* 字段来获取成员列表

db.user.find({'listed_in': 'list2'});

我还需要查询特定用户并知道他是否是某些列表的成员

var user1 = db.findOne({'screen_name': 'user1'});

在这种情况下,我将获得 *listed_in* 字段及其所有成员。

我的问题是:有没有办法在 mongoDB 中预先计算自定义字段?我需要能够获得这样的字段,user1.isInList1user1.isInList2

现在我必须在客户端通过迭代 *listed_in* 数组来了解用户是否是“list1”的成员,但 *listed_in* 可能有数千个元素。

4

1 回答 1

0

我的问题是:有没有办法在 mongoDB 中预先计算自定义字段?

并不真地。MongoDB 没有任何“计算列”的概念。因此,您要查找的查询不存在。

现在我必须在客户端通过迭代 *listed_in* 数组来了解用户是否是“list1”的成员,但 *listed_in* 可能有数千个元素

在您的情况下,您基本上是在尝试将客户端for循环推送到服务器上。但是,某些过程仍然必须执行for循环。坦率地说,循环遍历 10k 个项目对于客户端或服务器来说并不是真正的工作。

这里唯一真正的节省是防止网络上出现额外数据。

如果您真的想节省网络流量,则需要重新构建数据模型。这种重新结构可能涉及读取和写入两个查询,但通过网络传输的数据较少。但这就是权衡。

于 2011-12-27T00:33:08.180 回答