0

我有两个集合,组和用户。最初,我的 Group 文档包含一组 User 引用。但是我已经更改了我的映射,以便用户现在持有对组的引用。我想知道如何编写查询来更新所有现有的用户文档以引用当前正在引用它们的组,然后删除组上的任何引用。

4

1 回答 1

1

起初我没有注意到您使用的语言 - 我必须在 Python 中做一些非常相似的事情,所以这是我的示例代码:

# I changed my collection names to users/groups hope I mapped them right :)
users = db.users
groups = db.groups

for u in users.find():
    grp = groups.find( { "users" : u['userId'] } )
    u['groups'] = [ g['groupId'] for g in grp ]
    users.save(u)

基本上,对于每个用户,我都会在组中查找包含数组 users 中的 userId 的组列表,然后在 u 中创建一个名为 groups 的列表,当我保存它时,将一组组添加到 users 文档中。

在 PHP 中应该不难做到

$users = $db->用户;$groups = $db->groups;

// 查找所有用户 $ucursor = $users->find();

// 遍历用户,找到有用户的组, // 用组数组更新用户 foreach ($ucursor as $u) { $gcursor = $groups->find( ... ); foreach ($gcursor as $g) { ... } }

但这似乎是一次性操作,您可以在 mongo shell 中使用类似于以下内容的操作:

var users = db.users.find();
while (users.hasNext()) {
   u = users.next();
   var gs = db.groups.find({"users":u.userId},{"groupId:1}).toArray();
   db.users.update({"groupId":groupId},{$set:{"groups":gs}});
}
于 2012-05-08T17:31:01.597 回答