繁体   English   中英

如何使用C#查询MongoDB Collection中的Array内部?

[英]How to query inside Array in MongoDB Collection using C#?

我试图遍历形式的MongoDB集合:

{"_id":"lkashfhasdfhsdlafhlkjsdahf",
"
"Array":[{

                    "array_1":"17:00"}],

}

我想在上面的文档中获取array_1我在C#中使用以下代码尝试了它

result = Database.CollectionName.AsQueryable().Where(r => r.Array.array== array_inpit(Input) && condition2).ToList();

预期结果:所有具有匹配数组的文档

电流输出:错误

任何帮助我应该如何处理这个。

使用MongoDb.Driver包的基本示例。 您需要定义一些数据类型,例如:

// Use [BsonIgnoreExtraElements] attribute when not defining ALL fields in record
internal class MainRecord
{
    public ObjectId _id { get; set; }

    public List<ArrayItem> ResourceStatus { get; set; }

    // All the other fields here
}

// [BsonIgnoreExtraElements] as above
internal class ArrayItem
{
    public string E2EId { get; set; }
}

(注意 - 我省略了不需要进行数组搜索的所有字段)。

然后实际查询数据:

var client = new MongoClient();

IMongoDatabase db = client.GetDatabase("database-name-here");

var collectionName = "collection-name-here";

IMongoCollection<MainRecord> collection = db.GetCollection<MainRecord>(collectionName);

var filter = Builders<MainRecord>.Filter.ElemMatch(x => x.ResourceStatus, x => x.E2EId == "1fdsfsfsfsfsffds0");

var result = collection.Find(filter);

编辑:我建议看这篇文章 ,提供一些替代方法。

我创建简单的类,演示如何:

MongoDB类

public class MongoDBConnect : IDisposable
{
    public IMongoClient client;
    public IMongoDatabase database;

    public MongoDBConnect()
    {
        client = new MongoClient("mongodb://localhost");
        database = client.GetDatabase("dbo");
    }

    public void Dispose()
    {
        GC.WaitForPendingFinalizers();
        GC.Collect();
    }
}

你的收藏班

public class YourCollection
{
    [BsonId()]        
    public ObjectId Id { get; set; }

    [BsonElement("YourCollectionID")]
    public string YourCollectionID { get; set; }

    [BsonElement("AccessKey")]
    public string AccessKey { get; set; }
}

您的收集数据类

public class YourCollectionDAO : MongoDBConnect
{
    public YourCollectionDAO()
    {

    }

    public YourCollection Find(string yourCollectionID)
    {
        var collection = this.database.GetCollection<User>("YourCollection");

        Expression<Func<YourCollection, bool>> filter = x => x.yourCollectionID == yourCollectionID;

        IList<YourCollection> filtering = collection.Find(filter).ToList();

        var yourCollectionItem = filtering.Where(x => x.yourCollectionID == yourCollectionID).FirstOrDefault();

        return yourCollectionItem;
    }
}

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM