首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mongoDB集合中用新文档替换文档来更新文档

如何在mongoDB集合中用新文档替换文档来更新文档
EN

Stack Overflow用户
提问于 2013-07-24 15:08:38
回答 2查看 161关注 0票数 1

我使用ObjCMongoDB作为访问mongoDB的可可包装。在我必须找到并用新文档替换文档的情况下,我面临着困难。有人能通过指出ObjCMongoDB的代码/API来帮助我吗?

例如:

代码语言:javascript
复制
{
"_id" : { "$oid" : "51de4ed737965b2d233f4862"} ,
"milestone" : "Application 7.1 release" ,
"pendingtasklist" : [ task1 , task2 , task3]
}

在这里,我必须用新的列表替换来替换任务列表,结果应该是

代码语言:javascript
复制
{
"_id" : { "$oid" : "51de4ed737965b2d233f4862"} ,
"milestone" : "Application 7.1 release" ,
"someotherlist" : [ task12 , task33 , task32]
}

我已经附加了用于实现这一目标的代码,但没有成功。

代码语言:javascript
复制
NSError *connectionError = nil;
MongoConnection *dbConn = [MongoConnection connectionForServer:@"127.0.0.1:27017" error:&connectionError];


MongoDBCollection *collection = [dbConn collectionWithName:@"mydb.milestones"];

MongoKeyedPredicate *predicate = [MongoKeyedPredicate predicate];
[predicate keyPath:@"milestone" matches:@"Application 7.1 release"];

MongoUpdateRequest *updateReq = [MongoUpdateRequest updateRequestWithPredicate:predicate  firstMatchOnly:YES];
NSDictionary *milestoneDict = @{@"problemlist": @[@"12345",@"112244",@"55543",@"009009"],@"milestone":@"Application 7.1 release"};
[updateReq replaceDocumentWithDictionary:milestoneDict];

BOOL result = [collection updateWithRequest:updateReq error:&connectionError];

在我收集到这样的文件之前:

代码语言:javascript
复制
{ "_id" : { "$oid" : "51de4ed737965b2d233f4862"} , "milestone" : "Application 7.1 Release" , "problemlist" : [ 12345 , 112244 , 55543]}
{ "_id" : { "$oid" : "51de4ed737965b2d233f4864"} , "milestone" : "Application 7.1 UAT" ,  "problemlist" : [ 33545 , 7654 , 8767]}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-24 16:40:52

如果值保持不变,则只需重命名键:

  • -[MongoUpdateRequest keyPath:renameToKey:]

但是由于值正在改变,所以您应该只设置旧键并设置新键。

  • -[MongoUpdateRequest unsetValueForKeyPath:]
  • -[MongoUpdateRequest keyPath:setValue:]

正如我前面提到的,您可以通过一个更新请求来完成这个任务。

票数 1
EN

Stack Overflow用户

发布于 2013-07-24 15:52:18

为了重命名一个字段,您需要删除旧字段,并添加新字段。在这种情况下,您必须对此运行两个单独的查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17837995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档