Visão geral
Neste guia, você pode aprender como usar o driver C++ para especificar quais campos devem ser retornados de uma operação de leitura usando uma projeção}. Uma projeção é um documento que especifica quais campos o MongoDB retorna de uma query.
Dados de amostra
The examples in this guide use the restaurants collection in the sample_restaurants database from the Atlas sample datasets. To access this collection from your C++ application, instantiate a mongocxx::client that connects to an Atlas cluster and assign the following values to your db and collection variables:
auto db = client["sample_restaurants"]; auto collection = db["restaurants"];
Para aprender a criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o Guia de Introdução do MongoDB.
Tipos de projeção
Você pode usar uma projeção para especificar quais campos incluir em um documento de devolução ou para especificar quais campos excluir. Você não pode combinar declarações de inclusão e exclusão em uma única projeção, a menos que esteja excluindo o campo _id .
Especifique campos a serem incluídos
Para especificar os campos a serem incluídos no resultado, crie uma instância da classe mongocxx::options::find e defina seu campo projection . Para definir este campo, use a seguinte sintaxe:
<options instance>.projection(make_document(kvp("<field name>", 1)));
O exemplo a seguir define o campo projection de um objeto mongocxx::options::find para retornar somente os campos name, cuisine e borough de documentos correspondentes. Em seguida, ele chama o método find() para encontrar todos os restaurantes nos quais o valor do campo name é "Emerald Pub", passando o objeto mongocxx::options::find como parâmetro para find():
mongocxx::options::find opts{}; opts.projection(make_document(kvp("name", 1), kvp("cuisine", 1), kvp("borough", 1))); auto cursor = collection.find(make_document(kvp("name", "Emerald Pub")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, "borough" : "Manhattan", "cuisine" : "American", "name" : "Emerald Pub" } { "_id" : { "$oid" : "..." }, "borough" : "Queens", "cuisine" : "American", "name" : "Emerald Pub" }
When you use a projection to specify fields to include in the return document, the _id field is also included by default. All other fields are implicitly excluded. To remove the _id field from the return document, you must explicitly exclude it.
Exclua o campo _id
Ao especificar campos a serem incluídos, você também pode excluir o campo _id do documento retornado.
O exemplo a seguir executa a mesma query do exemplo anterior, mas exclui o campo _id da projeção:
mongocxx::options::find opts{}; opts.projection(make_document(kvp("_id", 0), kvp("name", 1), kvp("cuisine", 1), kvp("borough", 1))); auto cursor = collection.find(make_document(kvp("name", "Emerald Pub")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "borough" : "Manhattan", "cuisine" : "American", "name" : "Emerald Pub" } { "borough" : "Queens", "cuisine" : "American", "name" : "Emerald Pub" }
Especifique campos a serem excluídos
Para especificar os campos a serem excluídos no resultado, crie uma instância da classe mongocxx::options::find e defina seu campo projection . Para definir este campo, use a seguinte sintaxe:
<options instance>.projection(make_document(kvp("<field name>", 0)));
O exemplo a seguir define o campo projection de um objeto mongocxx::options::find para excluir os campos grades e address de documentos correspondentes. Em seguida, ele chama o método find() para encontrar todos os restaurantes nos quais o valor do campo name é "Emerald Pub", passando o objeto mongocxx::options::find como parâmetro para find():
mongocxx::options::find opts{}; opts.projection(make_document(kvp("grades", 0), kvp("address", 0))); auto cursor = collection.find(make_document(kvp("name", "Emerald Pub")), opts); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "..." }, "borough" : "Manhattan", "cuisine" : "American", "name" : "Emerald Pub", "restaurant_id" : "40367329" } { "_id" : { "$oid" : "..." }, "borough" : "Queens", "cuisine" : "American", "name" : "Emerald Pub", "restaurant_id" : "40668598" }
Quando você usa uma projeção para especificar quais campos excluir, quaisquer campos não especificados são implicitamente incluídos no documento de retorno.
Informações adicionais
To learn more about projections, see the Project Fields guide in the MongoDB Server manual.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: