我有一个复杂的嵌套动态BsonDocument,我需要查询该文档以查找所有"记录"具有相同的"类型"。
Json的一个例子是:
{
"Id": "",
"CategoryId": "41",
"FormVersion": "4",
"Metadata":{
"title": "some title",
"author": "Kevin B.",
"location": {
"url": "ed5cf2ea-c920-43b2-807b-65f5e4cac650.jpeg",
"type": "upload",
"size": "1001",
"format": "application/json",
"numbers": [1,2,3,4]
},
"file": {
"url": "ed5cf2ea-c920-43b2-807b-65f5e4cacddf50.jpeg",
"type": "upload",
"size": "1001",
"format": "application/json",
"numbers": [1,2,3,4]
}
}
}
这与我的控制器中的自定义ModelBinder映射到此类:
内容
public class Content : Base
{
public Guid Id { get; set; }
public int FormVersion { get; set; }
public int CategoryId { get; set; }
public BsonDocument Metadata { get; set; }
}
正如您在上面所看到的,"元数据" get被映射到BsonDocument。
现在,在将整个文档保存到MongoDB之前,我需要找到所有"记录"具有类型"上传"。我需要这个,因为我需要移动临时文件夹中的文件,这些记录包含临时文件URI。
在示例中,位置和文件是具有" upload"类型的对象。我需要以某种方式查询这个bsondocument并只获取这些文件,移动文件并保存。
我尝试过使用linq,但没有成功。我已查看this,但我没有收藏品可供使用。它只是一个对象。
答案 0 :(得分:0)
使用LINQ时,基本上构建Expression<Func<T, bool>>
,T
是您的文档类型。然后LINQ解析此表达式并使用属性访问器来构建特定于数据库的查询。
您正在尝试将动态对象属性内容用作过滤器。这不起作用,因为LINQ不知道如何在动态对象的内容中命名属性。
查询此类模式的唯一方法是使用本机MongoDb查询,因为您可以使用普通字符串撰写查询。