38

私はmongodbから始めて、ネストされたドキュメントをクエリするのに苦労しています。私は2つのスキーマを持っています:

var LinkSchema = new mongoose.Schema({
    url: String,
    name: String
});

var UserSchema = new mongoose.Schema({
    name: String,
    links: [LinkSchema]
});

ご覧のとおり、私は単純なブックマークツールを作成しようとしています。各ユーザーには、名前とリンクのコレクションがあります。各リンクには名前とURLがあります。

今、私がやろうとしているのは、たとえば、誰かのリンク配列にリンクがすでに存在するかどうかを確認することです。私はこのようなことをしたいと思っています(vladのリンクコレクションを取得してから、クエリリンクがすでにコレクションに属しているかどうかを確認しようとしています):

app.get("/:query", function(req, res){
  User.findOne({"name":"vlad"}, function(err, user){
    user.links.find({"url":req.params.query}, function(err, foundLinks){
      if(foundLinks){
        res.send("link already exists!");
      } else {
        res.send("link doesn't exist!");
      }
    });
  });
});

もちろん、このコードは機能しません。どうやら「user.links.find()」を実行できないからです。user.links.mapを実行してURLのみを抽出し、それに対してメンバーシップクエリを実行できると思います。しかし、これは正しい解決策にはほど遠いと思います。DBクエリを使用してこのようなことをネイティブに行う方法が必要です。誰かが助けることができますか?ありがとうございました!

4

2 に答える 2

77

このようにマングースに埋め込まれたドキュメントをクエリできます

   User.find({'links.url':req.params.query}, function(err, foundUsers){
      // ---
   });

ユーザー「vlad」に属するリンクを見つけるには、次のように記述します。

   User.find({name:'vlad','links.url':req.params.query}, function(err, foundUsers){
      // ---
   });

これでうまくいきます。

于 2012-10-27T14:01:53.787 に答える
2

特定のユーザーに属する特定のリンクを見つけるには、これを行うことができます

User.find({name:'vlad','links.url':req.params.query}, { 'links.$': 1 },  function(err, foundUsers){
      // ---
   });
于 2018-10-06T17:17:00.483 に答える