0

以下のスキーマ、ブログコレクション、および friendscoll があります。

blogpostcollection
    {
      "_id" : ObjectId("4fff0bf18bf0d19c4f1a5826"),
      "author" : "joe",
      "text" : "Here is the text...",
      "userid" : 0
    }
    {
      "_id" : ObjectId("4fff0bf18bf0d19c4f1a5827"),
      "author" : "blake",
      "text" : "Here is the text...",
      "userid" : 1
    }
    {
      "_id" : ObjectId("4fff0bf18bf0d19c4f1a5828"),
      "author" : "joe",
      "text" : "Here is the text...",
      "userid" : 2
    }

myfriendscoll
    {
      "myid": 999,
      "data": [
        {
          "uid": 1, 
          "name": "Raul"
        }, 
        {
          "uid": 3, 
          "name": "John K"
        } ]
    }

myfriendscoll コレクションで、userid が uid として存在する blogpostcollection 内のすべてのドキュメントを検索したいと考えています。つまり、実際には、次のようなものです..

var user = db.myfriendscoll.findOne({"myid" : 999}, {"data.uid": 1});
db.blogpostcollection.find( {"userid" : {$in : user.data.uid}});

これは機能しませんが、機能させる方法はありますか?...ありがとう!

4

2 に答える 2

1

開発バージョン 2.1 を使用している場合、またはリリース後に 2.2 に移行する場合は、集約フレームワークを使用して、最初のクエリから必要な形式を取得できます。

var ret=db.myfriendscoll.aggregate([
             {$match:{"myid" : 999}},
             {$project:{_id:0,uid:"$data.uid"}}
]);
var uids=ret.result[0].uid;
db.blogpostcollection.find({userid:{$in:uids}})
于 2012-07-14T22:13:47.660 に答える
0

$ inで使用するには、実際のuid値を配列に抽出する必要があります。これを試して:

var user = db.myfriendscoll.findOne({"myid" : 999}, {"data.uid": 1});
var uids = user.data.map(function(v){ return v.uid });
db.blogpostcollection.find( {"userid" : {$in : uids}});
于 2012-07-13T22:26:38.593 に答える