2

C# ドライバーを使用してサブコレクションをモデル化しようとしていますが、それが難しいと感じています。私がそれを行うのを手伝ってくれますか、それとも同じことの本格的な例を教えてください。

私はこれを達成しようとしています。

{
id:"id", name: 'name', Tokens:[{name:"yes",expiry:'Today'}, {name:"Hello", expiry:"tomorow"}]
}

私はこのようなクラスをモデル化しました

Class sample
{
    [BSON]
    public string id{get; set;}
    public string name{get; set;}
    public TokensCollection[] tokens(get; set;} 
} 

public class TokensCollection
{
    public string name{get;set;}
    public string expiry{get;set;}
}

そして、リポジトリで私はこのように同じものを初期化しようとしています、

Sample sample1 = new Sample{
id = ObjectId.GenerateNewId().ToString();
name = "name";
//Best way to model this? any pointers?
for (int index =1; index <=2; index++)
{
    tokens[index].name = "me";
    tokens[index].expiry = "Today"
}

collection.insert(sample1);

誰かがこれで私を助けてくれますか?

4

2 に答える 2

1

私はもともとMongoDb CSharp Google Groupであなたの質問に答えました。これは、同様の問題を抱えている人の例です。

using System;
using System.Collections.Generic;
using System.Linq;

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

using MongoDB.Driver;
using MongoDB.Driver.Linq;

namespace Test.ConsoleApp
{

public class Sample
{

    [BsonId]
    public ObjectId Id { get; private set; }
    public string Name { get; set; }
    public List<Token> Tokens { get; set; }

    public Sample()
    {
        Id = ObjectId.GenerateNewId();
        Tokens = new List<Token>();
    }

}

public class Token
{
    public string Name { get; set; }
    public string Expiry { get; set; }
}


public class Program
{
    static void Main(string[] args)
    {
        var server = MongoServer.Create("mongodb://localhost/database?safe=true");
        var database = server.GetDatabase("test");
        var samplesCollection = database.GetCollection<Sample>("samples");

        Console.WriteLine("Creating Sample #1 ... ");

        var sample1 = new Sample();
        sample1.Name = "Sample #1";
        sample1.Tokens.Add(new Token() { Name = "Name #1", Expiry = "Today" });

        Console.WriteLine("Creating Sample #2 ... ");

        var sample2 = new Sample();
        sample2.Name = "Sample #2";
        sample2.Tokens.Add(new Token() { Name = "Name #2", Expiry = "Tomorrow" });
        sample2.Tokens.Add(new Token() { Name = "Name #3", Expiry = "Next Tuesday" });

        Console.WriteLine("Saving Sample #1 and #2 ... ");

        samplesCollection.Save(sample1);
        samplesCollection.Save(sample2);

        Console.WriteLine("Fetching Sample #1 and #2 ... ");

        var sampleOneFromDb = samplesCollection.AsQueryable<Sample>().Where(c => c.Name.Contains("Sample #1"));

        Console.WriteLine("Sample #1 From DB - {0}", sampleOneFromDb.ToJson());
        Console.ReadLine();

    }
  }
}
于 2012-10-18T08:33:18.397 に答える
0

さて、私は答えを見つけることができました。Array を使用するのではなく IList を使用し、このようにオブジェクトを初期化しました。

サンプルクラスにはいくつかの変更があります

   Class Sample
    {
.....

public List<TokensCollection> tokens{get; set;}
}

を使用して同じように初期化しました

Sample sample1 = new Sample()
{

.....

tokens = new List<TokensCollection>{
new TokensCollection(){name='name1', expiry ='expiry1'},
new TokensCollection(){name='name2', expiry ='expiry2'}
}

}

埋め込まれたコレクション ドキュメントをチャームのように挿入する必要があります。さらにドキュメントを追加する場合は、使用する必要があります

tokes.add(new TokensCollection(){name='name3', expiry='expiry3})

ではごきげんよう

于 2012-10-13T13:20:38.480 に答える