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