0

我在 MongoDB 中深度嵌入了文档,如下所示:

[
 {
  id : 1,
  stuff : [
           {
            id : 1,
            morestuff: [
                        {id : 1, text : "foo"},
                        {id : 2, text : "boo"}
                       ]
           },
           {
            id : 2,
            morestuff: [
                        {id : 1, text : "foo2"},
                        {id : 2, text : "boo2"}
                       ]
           } 
          ]
 }
]

我的 C# 表示形式如下:

class CoreElement
{
    public int id { get; set; }
    public List<Stuff> stuff { get; set; }
}
class Stuff
{
    public int id { get; set; }
    public List<MoreStuff> morestuff { get; set; }
}
class MoreStuff
{
    public int id { get; set; }
    public string text { get; set; }
}

现在我可以有不同的情况:

  1. 具有给定 ID 的 CoreElement 不存在
  2. 具有给定 ID 的东西不在 CoreElement 的列表中
  3. MoreStuff 不在 CoreElement 的 Stuff 列表中

如果我创建这样的对象:

CoreElement ce = new CoreElement();
ce.id = 1;
Stuff st = new Stuff();
st.id = 2;
MoreStuff ms = new MoreStuff();
ms.id = 17;
ms.text = "something";
st.morestuff.Add(ms);
ce.stuff.Add(st);

有没有办法将它添加到我的集合中,以便如果一个已经存在,它会将 MoreStuff 添加到适当的文档中,或者如果一个尚不存在,则创建新文档(CoreElement 或 Stuff)?

任何帮助表示赞赏。谢谢。

4

1 回答 1

2

尝试使用$addToSet

仅当值不在数组中时,$addToSet 运算符才将值添加到数组中。如果值在数组中,则 $addToSet 返回而不修改数组。

您可以做的其他事情是加载您的 CoreElement 并在内存中使用它。您可以将 Suffs 和 MoreStuffs 添加到使用 C# 检查重复项的对象中。当您完成对象后,只需保存它,MongoDB 将用您修改的对象替换集合中的对象。

于 2013-06-25T15:25:37.360 回答