如何在C#中使用mongoDB中的findOne

时间:2018-04-12 08:10:40

标签: c# mongodb visual-studio

我以前使用此命令FindOne来查询mongoDB中带有C#的结果,并且可以在那时使用它。但现在我使用相同的代码,但它不起作用。我应该使用什么而不是FindOne

我的代码是这样的:

        var connectionString = "mongodb://localhost";
        var client = new MongoClient(connectionString);
        var database = client.GetDatabase("extend");
        var collection = database.GetCollection<Entity>("user");

        var query = Query<Entity>.EQ(e => e.user_id, int.Parse(targetUser.CurrentUser));
        var entity_TargetUser = collection.FindOne(query);

当我尝试运行它时,我收到了此错误

Error CS1061: 'IMongoCollection<Entity>' does not contain a definition for 'FindOne' and no extension method 'FindOne' accepting a first argument of type 'IMongoCollection<Entity>' could be found (are you missing a using directive or an assembly reference?) (CS1061)

我可以使用哪种命令代替FindOne

2 个答案:

答案 0 :(得分:1)

你正在处理一个id,所以我假设每一个都是唯一的 - 如果它们不是,它们应该是。假设user_id是唯一的,那么我会做以下

public static class MongoDataService
{
    public static async Task<List<BsonDocument>> GetDocumentCollectionAsync(
        MongoClient client, FilterDefinition<BsonDocument> filter,
        string databaseName, string collectionName, CancellationToken token,
        int? limit = null)
    {
        return await Task.Run(async () =>
        {
            long i = 1;
            List<BsonDocument> items = new List<BsonDocument>();
            var collection = GetCollection<BsonDocument>(client, databaseName, collectionName);
            using (var cursor = await collection.FindAsync(filter))
            {
                while (await cursor.MoveNextAsync())
                {
                    var batch = cursor.Current;
                    foreach (var doc in batch)
                    {
                        items.Add(doc);

                        if (token.IsCancellationRequested || i == limit)
                            return items;
                        i++;
                    }
                }
            }
            return items;
        }, token);
    }
}

使用正确过滤器的此方法将返回单个文档,或者可用于根据强制过滤器再次返回批量文档。根据您的情况调用此方法,您可以执行

var filterBuilder = Builders<BsonDocument>.Filter;
var filter = filterBuilder.Eq("user_id", int.Parse(targetUser.CurrentUser));
var documents = await MongoDataService.GetDocumentCollectionAsync(client, filter, "extend", "user", token, null);

还有其他方法可以做你想要的,但这应该做你想要的。

请注意,我假设您使用的是官方MongoDB.Driver

答案 1 :(得分:0)

你可以这样做:

    var connectionString = "mongodb://localhost";
    var client = new MongoClient(connectionString);
    var database = client.GetDatabase("extend");
    var collection = database.GetCollection<Entity>("user");

    var query = Query<Entity>.EQ(e.user_id,int.Parse(targetUser.CurrentUser));

    var entity_TargetUser = collection.AsQueryable().where(query).single();

    var connectionString = "mongodb://localhost";
    var client = new MongoClient(connectionString);
    var database = client.GetDatabase("extend");
    var collection = database.GetCollection<Entity>("user");



    var entity_TargetUser = collection.AsQueryable().where(e=>e.user_id == 
    int.Parse(targetUser.CurrentUser)).single();