0

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

{
    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}
4

1 回答 1

0

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

> 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
    }
}
>

这里有几点需要注意:

  1. 默认情况下,服务器总是返回 _id 字段
  2. field1 是唯一返回的其他字段(正是我们要求的)
  3. subfield2 被返回,因为它嵌入在 field1 中

我使用与您的稍有不同的 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 的输出基本相同。

如果您还有其他问题,请告诉我。

于 2013-05-08T21:34:37.610 回答