0

データベースで検索を実行し、ユーザーがアプリケーションに対して持っているロールを返し、それをセッションに保存しようとしています。

セッション中の最終状態は、user.applications = になりました。

[
    {
    "_id": "oehgf12083310f1h30f",
    "name": "Internal",
    "roles": {
                 "send": true,
                 "create_template": true,
                 "edit_template": true
             }
    }
]

アプリケーションのデータ構造:

[
    {
        "_id": "oehgf12083310f1h30f",
        "name": "Internal",
        "permissions": [
            {
                "username": "username2",
                "roles": {
                    "send": true,
                    "create_template": true,
                    "edit_template": true
                }
            },
            {
                "username": "username1",
                "roles": {
                    "send": true,
                    "create_template": true,
                    "edit_template": false
                }
            }
        ]
    }
]

mongodb コンソールの使用

この検索を実行すると、セッションで user.applications オブジェクトを設定するために必要なものを正確に返すことができます。

db.applications.find({
  "permissions.username": "username2"
}, {
  "permissions.$": true,
  name: true
}).pretty()

これは、username2 がアクセスできるすべてのアプリケーションを返しますが、それらが持っているアクセス許可のレベルだけを返します。したがって、username1 オブジェクトを除外します

monkを使用するnodejsで

find({
  "permissions.username": "username2" || req.query.username
}, {
  "permissions.$": true,
   name: true
}, function(err, docs) {});

この検索で​​は、username2 と username1 のユーザー オブジェクトが返されます。これは、正しいアクセス許可を抽出するためにさらに処理する必要があるため、問題があります。

質問

monk が私の検索で $ 位置指定子を使用できないようにしているのではないかと思いますが、間違っている場合は、それを使用して目的を達成する方法を教えてください。

そうでなければ、その最終状態を達成するために私ができる他のアイデア/アプローチは大歓迎です:)

4

1 に答える 1

0

たぶんこれが役立ちます:

find({permissions.username": "username2" || req.query.username }, { "permissions": { "$elemMatch": {"username": "username2"}}, name: true}, function(err, docs) {});
于 2014-09-28T10:21:28.590 に答える