0

Group と User の 2 つのコレクションがあります。もともと、私のグループ文書にはユーザー参照の配列が含まれていました。しかし、ユーザーがグループへの参照を保持するようにマッピングを変更しました。現在それらを参照しているグループを参照するように既存のすべてのユーザードキュメントを更新し、グループの参照を削除するクエリを作成する方法を考えています。

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)

基本的に、すべてのユーザーについて、groups を調べて、配列 users に userId を含むグループのリストを見つけます。u で groups というリストを作成し、保存すると、グループの配列を users ドキュメントに追加します。

PHPでそれを行うのは難しくないはずです

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

// すべてのユーザーを検索 $ucursor = $users->find();

// ユーザーを繰り返し処理し、そのユーザーを持つグループを見つけ、// グループの配列でユーザーを更新 foreach ($ucursor as $u) { $gcursor = $groups->find( ... ); foreach ($gcursor as $g) { ... } }

しかし、これは 1 回限りの操作のように思えます。次のようなものを使用して、mongo シェルで実行できます。

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 に答える