Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# (mongodb)使用csharp获取bson对象中的bson对象_C#_Mongodb_Mongodb .net Driver - Fatal编程技术网

C# (mongodb)使用csharp获取bson对象中的bson对象

C# (mongodb)使用csharp获取bson对象中的bson对象,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我有一个包含以下文档的集合: { field1: {subfield1:{ssfield1:5,ssfield2:6},subfield2:6}, field2: 1, ... } 我只想获取子字段,但我不确定如何从csharp查询它(它似乎没有在bsondocument中返回bsondocument) 有什么帮助吗 我试过这个: String c = "mongodb://"+myip; MongoServer server = MongoServer.Create(

我有一个包含以下文档的集合:

{
    field1: {subfield1:{ssfield1:5,ssfield2:6},subfield2:6},
    field2: 1,
    ...
}
我只想获取子字段,但我不确定如何从csharp查询它(它似乎没有在bsondocument中返回bsondocument)

有什么帮助吗

我试过这个:

String c = "mongodb://"+myip;
MongoServer server = MongoServer.Create(c);
MongoDatabase db = server.GetDatabase(mydb);
var collection = db.GetCollection(col); 
string[] fields = new string[] { "field1" };  
MongoCursor cursor = collection.Find().SetFields(fields);
但它似乎又回来了

{subfield2:6}

我创建了一个集合,其中一个文档与您的示例文档非常相似:

> db.test.find().pretty()
{
    "_id" : ObjectId("518ac1aa92f1c388279a9979"),
    "field1" : {
        "subfield1" : {
            "ssfield1" : 5,
            "ssfield2" : 6
        },
        "subfield2" : 6
    },
    "field2" : 1
}
>
在显示我试图复制您的C#代码时得到的结果之前,让我们先看看MongoDB shell中的同一个查询:

> db.test.find({}, { field1 : 1 }).pretty()
{
    "_id" : ObjectId("518ac1aa92f1c388279a9979"),
    "field1" : {
        "subfield1" : {
            "ssfield1" : 5,
            "ssfield2" : 6
        },
        "subfield2" : 6
    }
}
>
这里有几点需要注意:

  • 默认情况下,服务器总是返回_id字段
  • field1是唯一返回的其他字段(正是我们要求的)
  • 子字段2已返回,因为它嵌入在字段1中
  • 我使用了与您略有不同的C#代码来测试:

    foreach (var document in collection.FindAll().SetFields("field1"))
    {
        Console.WriteLine(document.ToJson(new JsonWriterSettings { Indent = true }));
    }
    
    我从循环中得到的结果是:

    {
      "_id" : ObjectId("518ac1aa92f1c388279a9979"),
      "field1" : {
        "subfield1" : {
          "ssfield1" : 5.0,
          "ssfield2" : 6.0
        },
        "subfield2" : 6.0
      }
    }
    
    这与MongoDB shell的输出基本相同

    如果您还有任何问题,请告诉我。

    尝试collection.find().first().GetElement(“field1”).value;