6

このアプリでは、Node.js、MongoDB、Mongoose、Express を使用しています

したがって、ピボットの配列を含む Param オブジェクトがあり、以下に概説するように、ピボットから特定のデータを読み取りたい

---in models.js-------------------------
    var Pivot = new Schema({
    value : String
  , destination : String
  , counter : Number
 });


var Param = new Schema({
    title : String
  , desc : String
  , pivots : [Pivot]
});


------------- in main.js --------------

var Param = db.model('Param');


app.get('/:title/:value', function(req, res){
    Param.findOne({"title":req.param('title')}, function(err, record){
           console.log(record.pivots);
           record.pivots.find({"value":req.param('value')}, function(err, m_pivot){
                    pivot.counter++;
                    res.redirect(m_pivot.destination);
           });
           record.save();
    });
});

内部に正しいピボット ドキュメントを含むドキュメント コレクションを取得したため、コードが console.log(record.pivots) まで機能することはわかっています。

ただし、スキーマで定義された「値」プロパティによって埋め込みドキュメントを照合できるようにする find メソッドはないようです。.find() または .findOne() を使用して、この埋め込みドキュメントの配列を検索することは可能ですか?そうでない場合、マングースを介してアクセスする簡単な方法はありますか?

4

5 に答える 5

3

ヴァルンスリン、

これでできるはず

app.get('/:title/:value', function(req, res) {
  Param.findOne({'pivots.value': req.param('value'), "title":req.param('title')}},
                function(err, record) {
                  record.pivot.counter++;
                  res.redirect(m_pivot.destination);  
                 record.save();
               });
});

スキーマのフィールド名と一致するように、クエリの複数形に注意してください

于 2011-05-09T02:56:17.163 に答える
1

次のように、埋め込まれたドキュメント プロパティを使用してクエリを実行できます。

{'pivot.value': req.param('value')}}

コメントに応じて更新:

app.get('/:title/:value', function(req, res) {
  Param.findOne({'pivot.value': req.param('value'), "title":req.param('title')}},
                function(err, record) {
                  record.pivot.counter++;
                  res.redirect(m_pivot.destination);  
                 record.save();
               });
});
于 2011-04-27T19:04:33.567 に答える
0

次のように、単純な for ループを使用してオブジェクト配列を解析し、一時的に解決しました。

for (var i=0; i <record.pivots.length; i++){
   if (record.pivots[i].value == req.param('value')){
      res.redirect(record.pivots.destination);
   } 
}

ただし、Mongoose には埋め込みドキュメントと対話するためのより簡単な方法が必要であると私は考えています。このループは、特に埋め込みドキュメントの数が大きくなると、やや遅くなります。

js または mongoose 関数を使用してこのオブジェクト配列をより高速に検索する方法について提案がある場合は、以下に投稿してください。

于 2011-04-25T23:35:49.820 に答える
0

「$in」キーワードを探していると思いますか?

次のように:

{a: {$in: [10, "hello"]}}

ソース: MongoDB クエリのチートシート

于 2011-04-25T17:46:56.323 に答える