En recherchant sur Internet comment récupérer un sous-ensemble de champs dans MongoDB, en utilisant le pilote officiel C # (mais en utilisant LinQ comme architecture de base), j’ai trouvé comment procéder dans un shell MongoDB.
// selecting only "field" of a collection db.collection.find( { field : 'value' }, { field: 1 } );
Ensuite, j’ai trouvé dans C # LinQ Tutorial la méthode Select
, qui est équivalente à ceci:
collection.AsQueryable().Select(x => new { x.field });
Cependant, le didacticiel indique que la méthode ” est utilisée pour projeter un nouveau type de résultat à partir des documents correspondants “.
Comment faire en sorte que cette méthode ne récupère que le sous-ensemble de champs et non l’ensemble du résultat, puis sélectionne uniquement le sous-ensemble dans un nouvel object?
Le pilote construira-t-il la commande de requête avant de récupérer les résultats?
Le pilote ne récupère actuellement aucun sous-ensemble des champs. Si vous avez besoin de cette fonctionnalité, vous devrez le faire manuellement. Le ticket pour cette fonctionnalité est ici: https://jira.mongodb.org/browse/CSHARP-456 . N’hésitez pas à laisser des commentaires ou à voter si vous en avez besoin.
C’est de la sortingche … mais:
//This actual implementation is untested and may contain small errors. //The helper method has been tested and *should* work. public static IMongoQuery GetMongoQuery(this IQueryable query) { return ((MongoQueryable )query).GetMongoQuery(); } var temp = from x in DB.Foo.AsQueryable() where x.SomeField > 5; select (x.OtherField); return temp.GetMongoQuery().ToJson();