繁体   English   中英

如何在mongodb C#驱动程序中推送以创建嵌入式文档

[英]How to push to do a emdeded document in mongodb c# driver

我在将文档推入另一个文档以在C#中创建嵌入文档时遇到问题。

我的模型如下:

 public class ModelKnjiga
{
    public ModelKnjiga() { }



    [BsonId(IdGenerator = typeof(CombGuidGenerator))] // pojavljuje  se greška kod BSON tipa podataka kod ID-a,preuzoteo s dokumentacije drivera 1.5
    public Guid Id { get; set; }

    [BsonElement("naziv")]
    public string naziv { get; set; }


    [BsonElement("autor")]
    public string autor { get; set; }


    [BsonElement("godina_izdanja")]
    public string godina_izdanja { get; set; }


    [BsonElement("izdavac")]
    public string izdavac { get; set; }

    [BsonElement("ocjena")]
    public String ocjena { get; set; }


    [BsonElement("čitam")]
    public Boolean čitam { get; set; }

    [BsonElement("završio")]
   public Boolean završio { get; set; }
}

另一个模型如下所示:

    public ModelKorisici () {

        KnjigaLista = new List<ModelKnjiga>();
    }



    [BsonId] // pojavljuje  se greška kod BSON tipa podataka kod ID-a,preuzoteo s dokumentacije drivera 1.5 CombGuidGenerator
    public Guid  Identifikator { get; set; }


    [BsonElement("ime")]
    public string ime { get; set; }


   [BsonElement("prezime")]
    public string prezime { get; set; }


    [BsonElement("lozinka")]
    public string lozinka { get; set; }


    [BsonElement("email")]
    public string email { get; set; }

    [BsonElement("kor_ime")]
    public string kor_ime { get; set; }

    [BsonElement("uloga")]
    public string uloga { get; set; }


    public List<ModelKnjiga> KnjigaLista { get; set; }


}

现在我正努力将ModelKnjiga推入Korisici模型

我正在尝试这种方法...

  public void dodajKnjiguKorisniku(ModelKnjiga knjiga, Guid id)
    {
        MongoCollection<ModelKorisici> korisniciKolekcija = GetTasksCollectionKlijenti();
        try
        {
            var pronadiKorisnika = Query<ModelKorisici>.EQ(e => e.Identifikator, id);
            var PushPodataka = Update<ModelKorisici>.Push(e => e.KnjigaLista, knjiga);

            korisniciKolekcija.Update(pronadiKorisnika, PushPodataka);
        }

        catch (MongoCommandException ex)
        {
            string msg = ex.Message;
        }
    }

在robomongo中,对象KnjigaLista始终为Null ...

有人可以帮忙吗?

我认为更新是遗留的。

(在您的模型中,您不必只使用字符串。例如:godina_izdanja可以是DateTime(),并且ocjena可以是某些数字格式...)

我为您的模型制作了一个(异步)示例,希望对您有所帮助:

class Program
    {
        static void Main(string[] args)
        {
            MainAsync(args).GetAwaiter().GetResult();
            Console.WriteLine("");
            Console.WriteLine("press enter");
            Console.ReadKey();
        }

        static async Task MainAsync(string[] args)
        {
            ModelKnjiga knga = new ModelKnjiga()
            {
                autor = "Author",
                godina_izdanja = "2015",
                izdavac = "izdavac",
                naziv = "naziv",
                ocjena = "20",
                završio = true,
                čitam = true
            };

            ModelKnjiga knga2 = new ModelKnjiga()
            {
                autor = "Author2",
                godina_izdanja = "2016",
                izdavac = "izdavac2",
                naziv = "naziv2",
                ocjena = "202",
                završio = false,
                čitam = false
            };

            ModelKnjiga knga3 = new ModelKnjiga()
            {
                autor = "Author3",
                godina_izdanja = "2017",
                izdavac = "izdavac3",
                naziv = "naziv3",
                ocjena = "203",
                završio = false,
                čitam = true
            };

            ModelKorisici mcor = new ModelKorisici()
            {
                email = "no@where.com",
                ime = "ime",
                KnjigaLista = new List<ModelKnjiga>() { knga, knga2 },
                kor_ime = "kor_ime",
                uloga = "uloga",
                lozinka = "lozinka",
                prezime = "prezime"
            };

            var client = new MongoClient();
            var db = client.GetDatabase("KnjigaDB");
            var korisici = db.GetCollection<ModelKorisici>("Korisici");

            //After first run comment this line out
            await korisici.InsertOneAsync(mcor);


            //After first run UNcomment these lines
            //var filter = Builders<ModelKorisici>.Filter.Eq("email", "no@where.com");
            //var update = Builders<ModelKorisici>.Update.Push("KnjigaLista", knga3);
            //await korisici.UpdateOneAsync(filter, update);
        }

    }

如果您不喜欢异步,请使用以下命令更改最后一行:

korisici.UpdateOne(filter, update);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM