1
문서에있는 값을 기준으로 예제에서 "부울 값"이 true에서 false로 또는 false에서 true로 전환하는 방법을 알아 내려고합니다. 그러므로 진실이라면 거짓으로, 거짓이라면 진실로 바꿔라. 예제 배열.프로그래밍 방식으로 Mongodb 네이티브 드라이버로 부울 값 전환
[{ _id: 59cb78434436be173e038aaa, active: true, title: 'One' },
{ _id: 59cb78434436be173e038aab, active: false, title: 'Two' },
{ _id: 59cb78434436be173e038aac, active: false, title: 'Three' }]
const todos = db.collection('todos');
const active = !active;
await todos.findOneAndUpdate({ _id: ObjectID(args.id) },
{ $set: { active: active } }, function(err, doc) {
if (err) {
throw err;
} else {
console.log('Updated');
}
});
{ $set: { active: true }}
에 true 또는 false를 전달하여 직접 설정할 수 없습니다. 어떻게하면 가치를 테스트하고 그 반대를 반환할까요?
감사 순간
답장 시간을내어 주신 Thanks @artem. 그 해결책은 findOneAndUpdate()까지 작동했습니다. 나는 $ mod b/c graphql을 처리 할 필요가 없었지만 그것을 배우게되어 기뻤다. 결국, 당신이 제안한 것처럼, 나는 bool에서 str으로 스키마 필드를 수정해야했기 때문에'''const todos = db.collection ('todos'); const oldStatus = todos.findOne을 기다립니다 ({_id : ObjectID (args.id)}); const newStatus =! oldStatus.active; todos.findOneAndUpdate ({_id : ObjectID (args.id)}, {$ set : {활성 : newStatus}})를 기다리고 있습니다. return todos.find(). toArray();'''이 작업을 수행하는 더 좋은 방법이 있습니까? – idkjs
숫자 대신 문자열을 사용해야하는 이유는 무엇입니까? 그리고 실제로 당신이 마침내 선택한 솔루션을 분명히 이해하지 못합니까? –
필드를 가져 오려면 todo.active를 쿼리로 가져옵니다. 필드의 토글 된 값인 newValue =! todo.active를 생성합니다. 그런 다음 원본 문서를 새 값으로 업데이트하십시오. 원자력이 아니고 두 번의 왕복 여행이 있었기 때문에 나는 또 다른 방법이있을 수 있기를 바랬다. – idkjs