MongoDB / C#更新集合条目

时间:2014-03-24 13:37:24

标签: c# linq mongodb collections mongodb-.net-driver

您好我有一个名为Nodes的mongoDB Collection,其结构如下:

{
  "_id" : new BinData(3, "Ljot2wCBskWG9VobsLA0zQ=="),
   "logicalname" : "Test Node",
   "host" : "eh5tmb054pc",
   "port" : 104,
   "appendtimestamp" : false,
   "studies" : ["1.3.12.2.1107"],
   "tests" : [],
    "mainentries" : [{
  "_id" : "1.3.12.2.1107",
  "Index" : 0,
  "Type" : "Study"
}]
}

我创建了一个名为“mainentries”的新密钥,现在存储了“研究”和“测试”。所以为了不费吹灰之力地支持我的新版本,我现在想在我的Setup Helper中编写一个方法,这将使我能够阅读这个集合 - 检查是否存在研究,测试,如果是,请添加关键字“mainentries”并删除研究/测试关键。

我的问题是:我必须使用哪种查询来访问每个节点集合以检查字段并进行更新。我正在使用MongoDB-CSharp社区驱动程序。

感谢任何帮助和指示。

1 个答案:

答案 0 :(得分:0)

您只需检查字段是否仍然存在:

var collection = db.GetCollection<Node>("nodes");
var nodes = collection.Find(Query.And( // might want Query.Or instead?
                Query<Node>.Exists(p => p.Tests),
                Query<Node>.Exists(p => p.Studies)).SetSnapshot();

foreach(var node in nodes) {
  // maybe you want to move the Tests and Studies to MainEntries here?
  node.MainEntries = new List<MainEntries>();
  node.Test = null;
  node.Studies = null;
  collection.Update(node);
}

如果您不想迁移数据,只是删除字段并创建新字段,您还可以使用$exists$set和{{1}进行简单的批量更新}