应用过滤器 GridFS MongoDb C#

Applying filter GridFS MongoDb C#

我正在尝试根据这两个因素过滤我的数据。第一个因素是 docID(对象 ID),第二个因素是作为元数据存储的 DocType。我是 pasting.I 的示例代码还附上了示例数据库 的样子。

 public async Task<ActionResult> DeleteDocument([FromRoute] int docType, [FromRoute] string docId)
        {
            try
            {
                var filter = Builders<GridFSFileInfo>.Filter.And(
    Builders<GridFSFileInfo>.Filter.Eq(x => x.Metadata.GetValue("DocType"), docType),
    Builders<GridFSFileInfo>.Filter.Eq(x => x.Id.ToString(), docId));
                
                using (var cursor = await Bucket.FindAsync(filter))
                {
                    var fileInfos = (await cursor.ToListAsync());
                    foreach (GridFSFileInfo fileInfo in fileInfos)
                    {

                        foreach (BsonElement bsonE in fileInfo.Metadata.ToList())
                        {
                            Console.WriteLine(fileInfo.Filename);
                        }

                    }
                }

            }

但我没有得到正确的结果,这给了我错误。谁能指出我做错了什么或如何根据元数据信息编写过滤器。

看起来上面的代码存在一些问题。 MongoDB 驱动程序正在努力将这些表达式转换为 MongoDB 查询。

.Eq(x => x.Metadata.GetValue("DocType"), docType)
.Eq(x => x.Id.ToString(), docId)

这是因为您需要使用索引器来访问元数据的字段,并且在将其与 Id 字段进行比较之前,您还需要将 docId 更改为正确的类型。

试试下面的过滤器。

var docType = 1;
var docId = ObjectId.Parse("5f3ce002796ba13443aa4bc5");

var filter = 
    Builders<GridFSFileInfo<ObjectId>>.Filter.Eq(x => x.Metadata["DocType"], docType)
    & Builders<GridFSFileInfo<ObjectId>>.Filter.Eq(x => x.Id, docId);