如何使用嵌套的 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 创建 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());
相关文章: