【问题标题】: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;
          }
      }
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-05
        • 1970-01-01
        • 2022-01-09
        • 2011-10-07
        相关资源
        最近更新 更多