Soy nuevo en MongoDB y estoy usando el controlador C#, versión: v4.0.30319: usando MongoDB.Bson; utilizando MongoDB.Driver;
En primer lugar, lo siento porque probablemente sea una pregunta simple y simplemente no puedo encontrar lo que necesito correctamente con los términos de búsqueda correctos para que esto funcione.
Para mi proyecto. Puedo conectarme a la base de datos, obtener una lista de todas las colecciones y recorrer una de las colecciones usando ASYNC. El problema que tengo es tratar de encontrar ejemplos que funcionen para cosas simples como contar, limitar o encontrar/obtener registros específicos.
La mayoría de los ejemplos parecen ser una versión anterior a la que estoy usando y todo lo que puedo encontrar requiere ASYNC.
Aquí hay una función que tengo que está funcionando y devolviendo datos.
Quiero poder tener una función que funcione y devuelva subconjuntos de datos (mediante una consulta), obtenga un recuento y otras cosas simples.
Mis datos en la colección son:
_id RocketRequestID int LoanRocketID int RequestDate date CreatedByID int RequestXML string/xml docmi función es:
static async Task<int>MainAsync() { int CountRecords = 0; var client = new MongoDatabaseConnection().mongoConn(); IMongoDatabase db = client.GetDatabase("Viper"); var collection = db.GetCollection<BsonDocument>("RocketRequest"); using (IAsyncCursor<BsonDocument> cursor = await collection.FindAsync(new BsonDocument())) { while (await cursor.MoveNextAsync()) { IEnumerable<BsonDocument> batch = cursor.Current; foreach (BsonDocument document in batch) { Console.WriteLine(document); Console.WriteLine(); } } }// end using return CountRecords; }// end asyncNuevamente, esto es probablemente algo simple y me disculpo, pero agradezco cualquier ayuda que pueda brindar.
Puede crear un objeto para asignar a su colección:
public class RocketRequest { public string Id { get; set; } public int RocketRequestID { get; set; } public int LoanRocketID { get; set; } public DateTime RequestDate { get; set; } public int CreatedByID { get; set; } public string RequestXML { get; set; } } Luego intente usar Linq agregando la siguiente declaración de using
using MongoDB.Driver.Linq;Luego puede escribir consultas más simples como (por ejemplo)
var collection = db.GetCollection<RocketRequest>("RocketRequest"); var count = collection.AsQueryable<Employee>() .Count();Utilice IFindFlient para recuperar sus datos:
Por ejemplo:
var items = collection.Find(x => x.CreatedByID == 1).ToEnumerable()O
var itemsCount = collection.Find(x => x.RequestDate >= dateToSearch).Count()Podría usar la clase y la carga de la colección, que se sugiere en la respuesta de @Alex. Es una buena explicación de cómo crear un objeto de colección y una clase de mapeo:
public class RocketRequest { public string Id { get; set; } public int RocketRequestID { get; set; } public int LoanRocketID { get; set; } public DateTime RequestDate { get; set; } public int CreatedByID { get; set; } public string RequestXML { get; set; } } var collection = db.GetCollection<RocketRequest>("RocketRequest");puedes intentar usar algo como esto:
public async Task<Round> GetRound(int id) { IMongoCollection<Round> collection = m_db.GetCollection<Round>("Rounds"); FilterDefinition<Round> filter = Builders<Round>.Filter.Eq("Round", id); return await collection.Find(filter).SingleOrDefaultAsync(); }Ejecuto un filtro por Id, también, puede usar el método Count() en lugar de SingleOrDefaultAsync(), por supuesto, necesitará cambiar su tipo de devolución para eso.
public async Task<long> GetRoundCount(int id) { IMongoCollection<Round> collection = m_db.GetCollection<Round>("Rounds"); FilterDefinition<Round> filter = Builders<Round>.Filter.Eq("Round", id); return await Task.Run(() => collection.Find(filter).Count()); }