{ "_id":1, "id":1, "list" : [ { "lv" : 1 , "id":1}, {"lv" : 2 , "id":2} ] }
我想確實發現({ 「_ ID」:1},{ 「ID」:1, 「list.lv」:1}),但限制{」 list.lv「:1}並附加一個條件:」list.id = id「。這意味着我只想檢索列表中第一個元素的「id」和「list.lv」部分,因爲它的「list.id」==「id」== 1
通常情況下,代碼中提供的條件值,但在本例中,該值在文檔中。 SQL通過子查詢或連接表執行此操作。 mongodb是否支持單個查詢?以及如何在C++驅動程序中編寫它?
根據答案,將C++代碼:
mongo::BSONObj res;
std::vector<mongo::BSONObj> pipeline;
pipeline.push_back(BSON("$match"<<BSON("_id"<<1)));
pipeline.push_back(BSON("$unwind"<<"$list"));
mongo::BSONArrayBuilder ab;
ab<<"$id"<<"$list.id";
pipeline.push_back(BSON("$project"<<BSON("id"<<1<<"list.lv"<<1<<"equalsFlag"<<BSON("$subtract"<<ab.arr()))));
pipeline.push_back(BSON("$match"<<BSON("equalsFlag"<<0)));
pipeline.push_back(BSON("$project"<<BSON("id"<<1<<"list.lv"<<1)));
conn->runCommand("db_name", BSON("aggregate" << "collection_name" << "pipeline" << pipeline), res);
std::cout<<res["result"].Array()[0].Obj().getObjectField("list").getIntField("lv");
我工作。我還在我的問題中添加了C++驅動程序代碼。 – jean
當然可以。完成! –