2012-05-18 142 views
0

模式:更新字段值

/* 0 */ 
    { 
     "_id" : ObjectId("4fb6376ef31dfd11c41c7fd0"), 
     "Name" : "A", 
     "Val" : "#rt45" 
    } 

    /* 1 */ 
    { 
     "_id" : ObjectId("4fb655aff31dfd11c41c7fd1"), 
     "Name" : "B", 
     "Val" : "#gh46" 
    } 

    /* 2 */ 
    { 
     "_id" : ObjectId("4fb65626f31dfd11c41c7fd2"), 
     "Name" : "C", 
     "Val" : "#rt67" 
    } 

我要插入数据“名称”,并希望查询,它应该检查“名称”字段(这里的值是A,B,C)是否存在如果有需要跳过插入 希望有人可以帮助,我在C#驱动程序请分享示例代码在此先感谢。 我已经在这个

IMongoQuery query = Query.Exists("_id", true); 
       var fields = Fields.Include("Name"); 
       var result = collection.Find(query).SetFields(fields).SetLimit(1).FirstOrDefault(); 
+0

请显示您到目前为止所尝试的内容。 – Reniuz

+0

在这里,我想检查“名称”上的字段值,因为插入是从数据源的数据库周围发生的,值已经存在对应于“名称”与否。 – Jafar

+0

编辑您的问题并将代码从评论移至问题 – Reniuz

回答

0

您可以先查找并查看是否已有一个具有相同名称值的文档,然后只在查找返回任何内容时才调用Insert。如果多个进程或线程正在做同样的事情,这将是不安全的。

另一种方法是在名称上创建一个唯一索引,然后执行插入操作。如果另一个文档已经存在具有相同的名称值,插入将失败。

0

FindAndModify是MongoDB中的方式来查询和更新一气呵成。

另一种方法是只用户更新

Collection.Update(Query. ..., Update.Set()) 

第二个可以,如果所有信息为一个新的职位还存在创建后,如果它不被查询中找到。

如果您尝试编写您正在尝试做的一步一步示例(用简单的英语),我可能会为C#编写一个示例。

+0

字典包含要插入的数据,调用此方法public void InsertData(Dictionary 字典),而插入那里应该是一个条件,如果数据库中已经存在字典数据然后更新。 – Jafar