2014-04-22 3 views
4

FindAndModify을 사용하여 문서를 수정하고 있습니다.MongoDb의 FindAndModify()가 변경된 문서를 반환하지 않습니다.

문서 유형 User이며 수정할 수있는 요소는 web라고 :

var users = _db.GetCollection<User>(UserCollectionName); 

var userQuery = Query.EQ("user", "testuser"); 

var findAndModifyResult = users.FindAndModify(
     new FindAndModifyArgs() 
     { 
      Query = userQuery, 
      Update = Update.Set("web", "testweb") 
     }); 

// user.web is unchanged in the result 
var user = findAndModifyResult.GetModifiedDocumentAs<User>(); 

// user.web is changed in the result 
user = users.FindOne(userQuery); 

GetModifiedDocumentAs()

user.web 여전히 업데이트 전의 같은 값을 갖고, 변경된 인스턴스를 반환하지 않습니다.

userFindOne()을 쿼리하면 변경된 값이 표시됩니다.

제가 처리해야 할 것이 있습니까? FindAndModify()은 수정 된 문서를 반환합니까? 나는 C#을 드라이버에서 이러한 옵션을 전송하는 방법을 잘 모르겠어요 {safe: true, 'new' : true}

:

답변

2

당신은 함께 조회 할 필요가있다. 최종 인수가 "새로운"옵션처럼

http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#findandmodify-method

보인다. FindAndModifyArgs를 사용하려면

collection.FindAndModify(
    new FindAndModifyArgs() 
    { 
     Query = query, 
     Update = updateOperation, 
     // this needs to be set 
     VersionReturned = FindAndModifyDocumentVersion.Modified 

    }); 
+0

감사합니다. 나는 안전한 깃발을 발견 할 수 없었다, 그것은 그것없이 일했다. – thumbmunkeys

+0

그래, mongodb 2.6에서는 '안전'명령이 기본적으로 켜져 있다고 생각합니다. –

7

이는 C# 드라이버 올바른 방법입니다. 이 메소드를 제외한 모든 오버로드는 버전 2.0에서 사용되지 않습니다. 다음은 IsBusy 필드가 false 인 객체를 찾아서 true로 변경 한 다음 반환하는 예제입니다.

FindAndModifyArgs findAndModifyArgs; 
FindAndModifyResult mongoResponse; 
IMongoQuery mongoQuery  = Query.EQ ("IsBusy", false); 
UpdateBuilder updateStatement = Update.Set("IsBusy", true); 

// Finding a not busy app, and updating it to busy. 
findAndModifyArgs = new FindAndModifyArgs() 
{ 
    Query   = mongoQuery, 
    Update   = updateStatement, 
    SortBy   = null, 
    VersionReturned = FindAndModifyDocumentVersion.Modified 
}; 
mongoResponse = _database.GetCollection<QueuedApp>(collectionName).FindAndModify(findAndModifyArgs); 
return BsonSerializer.Deserialize<QueuedApp>(mongoResponse.ModifiedDocument); 
+0

나는 새로운 가치를 얻는 방법을 궁금해합니까? – Jaider

1

올바른 방법입니다 : 윌 면도기 '답변을 확장하려면

관련 문제