首页 > 解决方案 > Model.findOne 没有按预期工作?

问题描述

[
  {
    "userId": "5bb6730721f28a295436b36e",
    "reputationNumber": 0,
    "questions": [],
    "answers": [],
    "id": "5bb6730721f28a295436b36f"
  },
  {
    "userId": "5bb6738c21f28a295436b370",
    "reputationNumber": 0,
    "questions": [],
    "answers": [],
    "id": "5bb6738c21f28a295436b371"
  }
]

我在模型 userDatas 中有 2 个元素,我想通过使用 userId 属性过滤来找到单个 userData。

这就是我所做的

Userdatas.findByUserId = function(req, res, cb) {
    const queryId = req.query.userId
    console.log("queryId: ",queryId);
    Userdatas.find({ userId: "5bb6738c21f28a295436b370"}, function(err, obj){
        console.log(obj);
        var userData = obj;
        cb(null, userData);
    });
}

令人惊讶的是,控制台输出是,

    [ { userId: '5bb6730721f28a295436b36e',
    reputationNumber: 0,
    questions: List [],
    answers: List [],
    id: 5bb6730721f28a295436b36f },
  { userId: '5bb6738c21f28a295436b370',
    reputationNumber: 0,
    questions: List [],
    answers: List [],
    id: 5bb6738c21f28a295436b371 } ]

我期望的是,

{
    "userId": "5bb6738c21f28a295436b370",
    "reputationNumber": 0,
    "questions": [],
    "answers": [],
    "id": "5bb6738c21f28a295436b371"
  }

但是该查询在 robo mongo shell 中完美运行。

标签: mongodbmongooseloopbackjs

解决方案


在环回“find”和“findOne”函数中接受这种模式的查询:{where:{queryFilters}}

因此,在您的示例中,您可以像这样更改它:

Userdatas.findByUserId = function(req, res, cb) {
    const queryId = req.query.userId
    console.log("queryId: ",queryId);
    Userdatas.findOne({ where:{userId: "5bb6738c21f28a295436b370"}}, function(err, obj){
        console.log(obj);
        var userData = obj;
        cb(null, userData);
    });
}

"strictObjectIDCoercion": true在选项添加属性下打开 user-datas.json 。


推荐阅读