0

mongo db にグループ コレクションがあり、グループのメンバーを埋め込みリストに格納します。

      { _id: 9876,
         name: group138,
         members: [{ login: user1, password: user1pass},
                   { login: user2, password: user2pass}],
         path: '/group1/group13/',
       }

複数のデータベース クエリ (およびコールバック呼び出し) を回避するために、このグループに属する 2 人のユーザーを同じコレクションに含める方法を見つけたかったのです。

ユーザーがログインしたら、そのユーザーとそのユーザーが属するグループを取得する必要があります。ログインとパスワードを同時にユーザーに照会できないことがわかりました。

db.groups.find({$and: [{"members.login": "user1pass"}, {"members.password" : "user2pass"}]})

パスワードが正しいものではないため、返すべきではないレコードを返します。ログインとパスワードをチェックするために正しいリクエストを実行するにはどうすればよいですか?

4

1 に答える 1

2

でクエリを実行すると"members.login": "user1"、「 login を持つメンバーを含むグループを返す」と言っていますuser1。2 番目の句と同様ですが、それらは無関係であるため、指定されたユーザー名とメンバーを持つユーザーを含むすべてのグループが返されます。同じメンバーであるかどうかに関係なく、指定されたパスワードを使用して。

あなたが探しているのは$elemMatch

{
  members: 
    {
      $elemMatch:
        {
          login: "user1",
          password: "user1pass"
        }
    }
}
于 2013-07-02T21:51:18.540 に答える