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

サンプル ドキュメントに非常によく似た 1 つのドキュメントでコレクションを作成しました。

> db.test.find().pretty()
{
    "_id" : ObjectId("518ac1aa92f1c388279a9979"),
    "field1" : {
        "subfield1" : {
            "ssfield1" : 5,
            "ssfield2" : 6
        },
        "subfield2" : 6
    },
    "field2" : 1
}
>

C# コードを再現しようとしたときに得られた結果を示す前に、MongoDB シェルで同じクエリを見てみましょう。

> db.test.find({}, { field1 : 1 }).pretty()
{
    "_id" : ObjectId("518ac1aa92f1c388279a9979"),
    "field1" : {
        "subfield1" : {
            "ssfield1" : 5,
            "ssfield2" : 6
        },
        "subfield2" : 6
    }
}
>

ここで注目すべき点がいくつかあります。

  1. デフォルトでは、サーバーは常に _id フィールドを返します
  2. 返された他のフィールドは field1 だけでした (まさに私たちが求めていたものです)。
  3. field1 に埋め込まれているため、subfield2 が返されました

テストには、あなたのものとは少し異なる 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 シェルからの出力と本質的に同じです。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-05-08T21:34:37.610 に答える