应用过滤器 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);
我正在尝试根据这两个因素过滤我的数据。第一个因素是 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);