1

Sail.js とその Waterline ORM を使用して単純なアプリケーションを作成しています。この部分については、NoSQL のピボット テーブル パターンに相当するものに従っています。各ユーザーは、subscriptionsサブスクライブしているすべてのチャネルの配列 を持っています。次を使用して、特定のチャンネル ID に登録しているすべてのユーザーを検索しようとしています。

User.find({subscriptions: {$in: [req.param('channel')]}}).done(function (err, users) {
   /* ... */
});

すべての記述が最も美しいコード行ではありませんが、動作するはずです。問題は、そうではないということです。usersは空の配列で、errnull です。実際に実行されたクエリは、たとえば (Node Inspector を使用して):

{ subscriptions: { '$in': [ '52fd1a033004de2d9bcb4980' ] } }

これと同じクエリを使用して、umongo GUI を介してユーザーを「検索」すると、正しく機能します。ただし、関数の実行時にユーザーが見つかりません。

そしてアイデア?ありがとう!

4

2 に答える 2

2

参考までに、受け入れられた回答は有効な Mongo クエリですが、有効な Sails コードではありません。あなたがしたい:

User.find({subscriptions: req.param('channel')}).done(function (err, users) {
  /* ... */
});

元のコードが機能しなかった理由は、Sails ORM (Waterline) が のようなネイティブの Mongo 演算子を理解していないためです$in。ただし、基盤となる Mongo アダプターを使用して操作を実行するため、1 つのチャネルを検索すると、配列findにそのチャネルを含むすべてのレコードと一致します。subscriptions低レベルの Mongo オペレーター ( など$all) を使用する必要がある場合nativeは、モデル クラスのメソッドを使用して、基になる Mongo アダプターにアクセスできることに注意してください。詳細については、この回答を参照してください。

于 2014-02-17T18:39:51.960 に答える
0

配列内で何かを見つけるのに $in は必要ありません。簡単な検索でうまくいきます:

db.users.find({subscriptions : '52fd1a033004de2d9bcb4980'})

そのチャネルを持つすべてのユーザーが返されます。

于 2014-02-14T18:57:19.767 に答える