【问题标题】:How to query inside Array in MongoDB Collection using C#?如何使用 C# 查询 MongoDB 集合中的数组内部?
【发布时间】:2023-03-18 10:39:01
【问题描述】:
我正在尝试遍历表单的 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();
预期结果:匹配数组的所有文档
当前输出:错误
任何帮助我应该如何继续。
【问题讨论】:
标签:
c#
json
asp.net-mvc
mongodb
asp.net-web-api
【解决方案1】:
使用MongoDb.Driver package 的基本示例。您需要定义一些数据类型,例如:
// 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);
编辑:我建议查看this post,它提供了一些替代方法。
【解决方案2】:
我创建简单的类并演示如何:
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;
}
}
希望对你有帮助。