[MONGODB] 몽구스 : findOneAndUpdate 업데이트 문서를 반환하지 않습니다
MONGODB몽구스 : findOneAndUpdate 업데이트 문서를 반환하지 않습니다
다음은 내 코드입니다
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var Cat = mongoose.model('Cat', {
name: String,
age: {type: Number, default: 20},
create: {type: Date, default: Date.now}
});
Cat.findOneAndUpdate({age: 17}, {$set:{name:"Naomi"}},function(err, doc){
if(err){
console.log("Something wrong when updating data!");
}
console.log(doc);
});
난 이미 내 몽고 데이터베이스에 몇 가지 기록을 가지고 있고 나이는 17이고, 다음 코드의 끝 부분에서 결과를 인쇄하는 업데이트 이름이 코드를 실행하고 싶습니다.
그러나 난 아직도 왜 콘솔에서 같은 결과 (안 수정 된 이름)을 얻을하지만 난 DB 명령 줄을 입력 몽고에 갈 때 "db.cats.find를 ();". 그 결과, 이름을 변경해왔다.
그런 다음 다시이 코드를 실행하는 돌아가서 결과가 수정됩니다.
내 질문은 : 데이터가 수정 된 경우를 CONSOLE.LOG 때, 나는 여전히 처음에 원본 데이터를 가지고 왜.
해결법
-
==============================
1.기본값은 변경되지 않은 원본 문서를 반환하는 것입니다. true로 새 속성 세트 객체 : 새 업데이트 된 문서를 반환 할 경우에는 추가 인수를 전달해야합니다.
기본값은 변경되지 않은 원본 문서를 반환하는 것입니다. true로 새 속성 세트 객체 : 새 업데이트 된 문서를 반환 할 경우에는 추가 인수를 전달해야합니다.
몽구스 문서에서 :
그래서, 당신은 문서 변수에 업데이트 된 결과를 원하는 경우 :
Cat.findOneAndUpdate({age: 17}, {$set:{name:"Naomi"}}, {new: true}, (err, doc) => { if (err) { console.log("Something wrong when updating data!"); } console.log(doc); });
-
==============================
2.대신 {새로운 : TRUE}의 : 대신 몽구스의 Node.js를 드라이버를 사용하는 모든 사용자를 들어, 사용 {거짓 returnOriginal}에 할 것입니다.
대신 {새로운 : TRUE}의 : 대신 몽구스의 Node.js를 드라이버를 사용하는 모든 사용자를 들어, 사용 {거짓 returnOriginal}에 할 것입니다.
-
==============================
3.그래서, "findOneAndUpdate는"원본 문서를 반환 할 수있는 옵션이 필요합니다. 그리고, 옵션은 다음과 같습니다
그래서, "findOneAndUpdate는"원본 문서를 반환 할 수있는 옵션이 필요합니다. 그리고, 옵션은 다음과 같습니다
{returnNewDocument : TRUE}
참조 : https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/
{새로운 : TRUE}
참조 : http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate
{returnOriginal : 거짓}
참조 : http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#findOneAndUpdate
-
==============================
4.기본적으로 findOneAndUpdate은 원본 문서를 반환합니다. 함수에 : 당신이 그것을 반환 할 경우 수정 된 문서는 {사실 새로운} : 옵션 개체를 전달 :
기본적으로 findOneAndUpdate은 원본 문서를 반환합니다. 함수에 : 당신이 그것을 반환 할 경우 수정 된 문서는 {사실 새로운} : 옵션 개체를 전달 :
Cat.findOneAndUpdate({ age: 17 }, { $set: { name: "Naomi" } }, { new: true }, function(err, doc) { });
-
==============================
5.기본 약속이 사용 ES6 / ES7 스타일을 우연히 발견 누구든지, 여기 당신이 채택 할 수있는 패턴입니다 ...
기본 약속이 사용 ES6 / ES7 스타일을 우연히 발견 누구든지, 여기 당신이 채택 할 수있는 패턴입니다 ...
const user = { id: 1, name: "Fart Face 3rd"}; const userUpdate = { name: "Pizza Face" }; try { user = await new Promise( ( resolve, reject ) => { User.update( { _id: user.id }, userUpdate, { upsert: true, new: true }, ( error, obj ) => { if( error ) { console.error( JSON.stringify( error ) ); return reject( error ); } resolve( obj ); }); }) } catch( error ) { /* set the world on fire */ }
-
==============================
6.이 findOneAndUpdate에 대한 업데이트 된 코드입니다. 그것은 작동합니다.
이 findOneAndUpdate에 대한 업데이트 된 코드입니다. 그것은 작동합니다.
db.collection.findOneAndUpdate( { age: 17 }, { $set: { name: "Naomi" } }, { returnNewDocument: true } )
-
==============================
7.// 당신이 Cat.findOneAndUpdate (조건, 갱신, 옵션, 콜백)를 사용할 수 있습니다 API 참조가 실행을 : 당신이 변경된 문서를 반환 할 경우에 당신은 {사실 새로운} 옵션을 설정해야합니다
// 당신이 Cat.findOneAndUpdate (조건, 갱신, 옵션, 콜백)를 사용할 수 있습니다 API 참조가 실행을 : 당신이 변경된 문서를 반환 할 경우에 당신은 {사실 새로운} 옵션을 설정해야합니다
공식 몽구스 API에 의해 촬영하는 http://mongoosejs.com/docs/api.html#findoneandupdate_findOneAndUpdate 다음과 같은 매개 변수를 사용할 수 있습니다
A.findOneAndUpdate(conditions, update, options, callback) // executes A.findOneAndUpdate(conditions, update, options) // returns Query A.findOneAndUpdate(conditions, update, callback) // executes A.findOneAndUpdate(conditions, update) // returns Query A.findOneAndUpdate() // returns Query
또 다른 구현 그게 전부는 공식 API 페이지에 표시하고 당신이 모든 다양한 오류를 처리 할 수있는 .catch 가질 수 있도록 약속의 기본 구현이 무엇인지 내가 사용하는 것을 선호하지 않습니다.
let cat: catInterface = { name: "Naomi" }; Cat.findOneAndUpdate({age:17}, cat,{new: true}).then((data) =>{ if(data === null){ throw new Error('Cat Not Found'); } res.json({ message: 'Cat updated!' }) console.log("New cat data", data); }).catch( (error) => { /* Deal with all your errors here with your preferred error handle middleware / method */ res.status(500).json({ message: 'Some Error!' }) console.log(error); });
-
==============================
8.여기 몽구스 메인테이너. true로 새로운 옵션을 설정해야합니다 (false로 동등하게, 또는, returnOriginal)
여기 몽구스 메인테이너. true로 새로운 옵션을 설정해야합니다 (false로 동등하게, 또는, returnOriginal)
await User.findOneAndUpdate(filter, update, { new: true }); // Equivalent await User.findOneAndUpdate(filter, update, { returnOriginal: false });
참조 몽구스 findOneAndUpdate () 문서와 몽구스의 문서 업데이트에 대한이 튜토리얼.
-
==============================
9.쇼 아래 몽구스에 대한 쿼리는 findOneAndUpdate을합니다. 여기에 새로운 : 사실 업데이트 된 문서를 가져 오는 데 사용됩니다 및 필드 얻기 위해 특정 분야에 사용됩니다.
쇼 아래 몽구스에 대한 쿼리는 findOneAndUpdate을합니다. 여기에 새로운 : 사실 업데이트 된 문서를 가져 오는 데 사용됩니다 및 필드 얻기 위해 특정 분야에 사용됩니다.
예를 들면. findOneAndUpdate (조건, 갱신, 옵션, 콜백)
await User.findOneAndUpdate({ "_id": data.id, }, { $set: { name: "Amar", designation: "Software Developer" } }, { new: true, fields: { 'name': 1, 'designation': 1 } }).exec();
from https://stackoverflow.com/questions/32811510/mongoose-findoneandupdate-doesnt-return-updated-document by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 나는 MongoDB를 ObjectId가 날짜별로 조회 할 수 있습니까? (0) | 2019.11.30 |
---|---|
[MONGODB] 몽구스 단일 Node.js를 프로젝트에서 여러 데이터베이스 (0) | 2019.11.30 |
[MONGODB] db.collection MongoClient은 버전 3.0을 사용하여 함수가 아니다 (0) | 2019.11.30 |
[MONGODB] 중복 몽고 ObjectId가의 가능성은 두 개의 서로 다른 컬렉션에서 생성되는거야? (0) | 2019.11.30 |
[MONGODB] 어떻게 필드의 유형을 변경하려면? (0) | 2019.11.30 |