programing

몽구스 findOne 사용법

magicmemo 2023. 5. 16. 22:28
반응형

몽구스 findOne 사용법

아래 스키마를 가지고 있습니다(커피스크립트에 있는 것에 대해 사과드립니다).

Schema = mongoose.Schema

AuthS = new Schema
    auth:   {type: String, unique: true}
    nick:   String
    time:   Date
Auth = mongoose.model 'Auth', AuthS

데이터베이스에 확실히 있는 레코드를 하나만 복구하고 싶습니다.

Auth.findOne({nick: 'noname'}, function(obj) { console.log(obj); });

불행히도 이것은 항상 기록됩니다.null.db.auths.findOne({nick: 'noname'})in mongo shell은 항상 값을 반환합니다.무슨 일입니까?

문제 발견, 사용 필요function(err,obj)대신:

Auth.findOne({nick: 'noname'}, function(err,obj) { console.log(obj); });

Mongoose는 기본적으로 mongodb의 api를 감싸 유사 관계형 dbapi를 제공하므로 쿼리가 mongodb 쿼리와 정확하게 같지 않습니다.Mongoose findOne 쿼리는 문서가 아닌 쿼리 개체를 반환합니다.솔루션이 제안하는 대로 콜백을 사용하거나 v4+의 findOne에서 테이블을 반환하여 .then 또는 wait/async를 사용하여 문서를 검색할 수 있습니다.

// thenables
Auth.findOne({nick: 'noname'}).then(err, result) {console.log(result)};
Auth.findOne({nick: 'noname'}).then(function (doc) {console.log(doc)});

// To use a full fledge promise you will need to use .exec()
var auth = Auth.findOne({nick: 'noname'}).exec();
auth.then(function (doc) {console.log(doc)});

// async/await
async function async auth() {
  const doc = await Auth.findOne({nick: 'noname'}).exec();
  return doc;
}
auth();

타사 약속 라이브러리를 사용하려면 문서를 참조하십시오.

같은 오류가 발생한 경우, 저는 Asianc / Waiting 기능을 사용하고 있습니다. 이것은 findOne에 WAITE를 추가해야 하기 때문입니다.

Ex:const foundUser = User.findOne ({ "email" : req.body.email });

위에서 foundUser는 findOne을 완료하기 전에 값을 반환하기 때문에 항상 사용자가 찾거나 그렇지 않은 경우 모두 Object 값을 항상 포함합니다.

const foundUser = await User.findOne ({ "email" : req.body.email });

위에서 foundUser가 제공된 조건의 컬렉션에 사용자가 없으면 null을 반환합니다. 사용자가 발견되면 사용자 문서를 반환합니다.

사용하는 것을 고려해 보는 것이 좋습니다.console.log내장된 "임의" 개체를 사용하는 경우:

console.log(arguments); // would have shown you [0] null, [1] yourResult

이렇게 하면 아무리 많은 인수가 있더라도 항상 모든 인수가 출력됩니다.

obj[0]nick을 사용하면 원하는 결과를 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/7033331/how-to-use-mongoose-findone

반응형