我正在尝试通过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);
有人可以帮我吗?
答案 0 :(得分:0)
好吧,我找到了答案。我使用IList而不是使用Array并且像这样初始化对象
示例类
中有几处更改 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})
一切顺利
答案 1 :(得分:0)
我最初在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();
}
}
}