首页 > 解决方案 > 在 mongoose 的嵌套查询中按 id 查找用户

问题描述

我有一个这样的查询:

router.get('/match', (req, res, next) => {
  User.findOne({ _id: req.query.id }, (err, userfound) => {
    if (err) return next(err);
    console.log('userfound ', userfound);
    User.find({ gender: getGender(userfound.doc.gender), age: { $gte: (userfound.doc.age - 5), $lte: userfound.doc.age } }, function (err, matches) {
      res.json({
        success: true,
        matches: matches,
        message: "Successful"
      });
    });
  });

它以不友好的模式返回文档:

userfound = model = {
  '$__': InternalCache {
  strictMode: true,
    selected: { },
  shardval: undefined,
    saveError: undefined,
      validationError: undefined,
        adhocPaths: undefined,
          removing: undefined,
            inserting: undefined,
              version: undefined,
                getters: { },
  _id: 5d69463e768de047b6aaf739,
    populate: undefined,
      populated: undefined,
        wasPopulated: false,
          scope: undefined,
            activePaths: StateMachine {
    paths: [Object],
      states: [Object],
        stateNames: [Array]
  },
  pathsToScopes: { },
  ownerDocument: undefined,
    fullPath: undefined,
      emitter: EventEmitter {
    _events: [Object: null prototype] { },
    _eventsCount: 0,
      _maxListeners: 0
  },
  '$options': true
},
isNew: false,
  errors: undefined,
    _doc: {
  created: 2019 - 08 - 30T15: 52: 30.048Z,
    __v: 0,
      name: 'Chris',
        dob: 2019 - 12 - 28T00: 00: 00.000Z,
          age: -1,
            gender: 'male',
              tongue: 'xxxxx',
                religion: 'xxxxx',
                  mobile: '9999999999',
                    email: 'chris.k20@gmail.com',
                      password: '$2a$10$LcxHafqgwJVCBDupR4v7wePkvLCQzs8eilq.QpQ4q2MJ8IfcnUAfa',
                        picture: 'https://gravatar.com/avatar/fe5efae62aa7f13c40efec1fb197ac98?s200&d=retro',
                          _id: 5d69463e768de047b6aaf739
},
'$init': true
}

对象内部的实际内容是 this:

 _doc: {
  created: 2019 - 08 - 30T15: 52: 30.048Z,
    __v: 0,
      name: 'Chris',
        dob: 2019 - 12 - 28T00: 00: 00.000Z,
          age: -1,
            gender: 'male',
              tongue: 'xxxxx',
                religion: 'xxxxx',
                  mobile: '9999999999',
                    email: 'chris.k20@gmail.com',
                      password: '$2a$10$LcxHafqgwJVCBDupR4v7wePkvLCQzs8eilq.QpQ4q2MJ8IfcnUAfa',
                        picture: 'https://gravatar.com/avatar/fe5efae62aa7f13c40efec1fb197ac98?s200&d=retro',
                          _id: 5d69463e768de047b6aaf739
}

标签: node.jsmongoose

解决方案


用于toObject()对象和lean()对象数组


推荐阅读