如何使用嵌套的 expandoObject 创建 BSON 文档,其中一个是转换后的字典
本文关键字:一个 转换 字典 expandoObject 嵌套 何使用 创建 BSON 文档 | 更新日期: 2023-09-27 18:32:00
我有一个扩展对象d,我想遍历字典并获取其键和值来创建一个新对象{key:value,key:value},然后将该新对象分配给d,当然最后将其序列化为bsonDocument进行插入。
如果只是拿字典做一个.toArray(),我不会得到mongoDB序列化错误,但是如果我从这个新对象创建一个新的expandObject,或者只是将我提到的字典作为d.newObject传递,我得到一个无用的mondodb序列化错误。
我将如何做到这一点(1),对于BSON文档的期望,我可以和不能序列化的内容,我错过了什么?
与其自己从头开始ExpandoObject
为MongoDB编写这种动态类型功能,不如使用像Slazure这样的动态ORM或ODM来获利,MongoDB支持仍处于封闭测试阶段,但应该很快就会公开可用。下面是一个示例,其中 Slazure Linq 查询从"TestCustomers"集合返回一些文档,并且每个文档属性名称都写入控制台:
using SysSurge.Slazure.MongoDB.Linq;
using SysSurge.Slazure.Core;
using SysSurge.Slazure.Core.Linq.QueryParser;
public void EnumProperties()
{
// Get a reference to the collection
dynamic storage = new QueryableStorage<DynDocument>("mongodb://user:pass@example.org/MongoDBExample");
QueryableCollection<DynDocument> collection = storage.TestCustomers;
// Build collection query
var queryResult = collection.Where("SignedUpForNewsletter = true and Age < 22");
foreach (DynDocument document in queryResult)
{
foreach (KeyValuePair<string, IDynProperty> keyValuePair in document)
{
Console.WriteLine(keyValuePair.Key);
}
}
}
如果您需要实际获取BsonDocument
对象,那么您可以通过调用 Document
方法从 Slazure DynDocument
对象获取它,示例如下:
foreach (DynDocument document in queryResult)
{
BsonDocument bsonDoc = document.Document
Console.WriteLine(bsonDoc["someProperty"].AsString());