2017-03-27 9 views
0

このようなオブジェクトの配列を持つドキュメントのクエリを作成しようとしています。タグが追加された経緯。オブジェクトのマングース配列をスラッグで問い合わせ

{ 
    "added_by" : ObjectId("58d92d8b11af264b87a8f5d4"), 
    "tag" : ObjectId("58d92d8b11af264b87a8f5ed"), 
    "_id" : ObjectId("58d92d8c11af264b87a8f6d5"), 
    "added_at" : ISODate("2017-03-02T22:06:42.788Z") 
} 

私はこれを試してみましたスラグだけ_id

に問い合わせをすることができないのです。ここで

var query = { 
    'tags.tag': { 
     slug: $in: ['tag-name'] 
    } 
} 
Node.find(query, (err, nodes) => { 
    if (err) { 
     res.status(404) 
     res.send(err) 
    } else { 
     res.json(nodes); 
    } 
}).populate(['tags.tag']) 

は文書である:

{ 
    "_id" : ObjectId("58d92d8c11af264b87a8f6d0"), 
    "user_id" : ObjectId("58d92d8b11af264b87a8f5d4"), 
    "uid" : "-KeG2FvL0jwkHFvOautH", 
    "updated_at" : ISODate("2017-03-02T22:06:42.788Z"), 
    "created_at" : ISODate("2017-03-02T22:06:42.051Z"), 
    "tags" : [ 
     { 
      "added_by" : ObjectId("58d92d8b11af264b87a8f5d4"), 
      "tag" : ObjectId("58d92d8b11af264b87a8f5ed"), 
      "_id" : ObjectId("58d92d8c11af264b87a8f6d5"), 
      "added_at" : ISODate("2017-03-02T22:06:42.788Z") 
     }, 
     { 
      "added_by" : ObjectId("58d92d8b11af264b87a8f5d4"), 
      "tag" : ObjectId("58d92d8b11af264b87a8f626"), 
      "_id" : ObjectId("58d92d8c11af264b87a8f6d4"), 
      "added_at" : ISODate("2017-03-02T22:06:42.788Z") 
     } 
    ], 
    "status" : "publish", 
    "description" : "some text here", 
    "title" : "Anna James", 
    "__v" : 0 
} 

どれでも思考?

答えて

0

あなたがタグへの参照を格納しているので、あなたが最初のスラグでタグを取得する必要があります。

TagsCollection.find({slug:'tag-name'}, (err, tags)...) 

その後、tag._idによってフィルタリング:

var query = { 
    'tags.tag': new ObjectId(tag._id) 
} 

または

var query = { 
    'tags.tag': {'$in": [new ObjectId(tag._id), ....]} 
} 

をスラッグと一致するタグが2つ以上ある場合。

正直なところ、参照を格納するのではなく、ドキュメントに直接タグを格納する方が効率的です。

関連する問題