[英]Why findOne({ id }) is not working properly in mongoose 6.012
我正在使用 mongoose 通過其 ID 查找一個用戶,但它無法正常工作。 我嘗試了幾種不同的方法,但只得到了錯誤的結果或錯誤。
這是我的代碼。
const { id } = req.params;
const user = await User.findOne({ id });
console.log(id);
console.log(user);
return res.redirect("back");
我嘗試了以下方法
1 - await User.findOne({ id });
無論 id 是什么,都返回第一個用戶。
target id: a8fc083f3f55494fa2cadf9
{
_id: new ObjectId("618fb03e37876d1f0bccb945"),
name: 'bohetefyhy',
email: 'refo@mailinator.com',
dataRealm: new ObjectId("618fb0119eefb1308fe65610"),
role: 'user',
createdAt: 2021-11-13T12:31:58.846Z,
updatedAt: 2021-11-15T08:03:34.422Z,
__v: 0
}
2 - await User.findOne({ id: id });
返回與上述 (1) 相同的結果。
3 - await User.findOne({ _id: id });
給出錯誤。
CastError: Cast to ObjectId failed for value "a8fc083f3f55494fa2cadf9" (type string) at path "_id" for model "User"
at model.Query.exec (C:\Users\khan\Documents\Projects\030FL014_Windshield\app\node_modules\mongoose\lib\query.js:4545:21)
at model.Query.Query.then (C:\Users\khan\Documents\Projects\030FL014_Windshield\app\node_modules\mongoose\lib\query.js:4644:15)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
我還注意到結果中缺少 mongoose 添加的id字段。 對於_id值是 new ObjectId("618fb03e37876d1f0bccb945" ) 而不是簡單的"618fb03e37876d1f0bccb945"
我在用
“貓鼬”:“^6.0.12”,
MongoDB 5.0.3 2008R2Plus SSL(64 位)
好的,所以我發現了問題,我的 object Id 中只有 23 個字符從一開始就丟失了。 但仍然為什么 id 字段缺少 mongoose 添加以及為什么 _id 是新的 ObjectId("618fb03e37876d1f0bccb945" ) 而不是簡單的"618fb03e37876d1f0bccb945"當我登錄時
我今天遇到了同樣類型的問題,並通過社區指南解決了它。
我用這些簡單的代碼解決了它。 也許你也可以試試。 這里我用Email試了一下,你可以用_id試試。 我發現它們都有效。
const router = require('express').Router();
const userModel = require('../models/usermodel');
router.post('/api/user/registration', async (req, res) => {
const emailX = req.body.email;
const emailExist = await userModel.findOne({'email': emailX }); // Finding the Email exist or not
console.log(emailX, "Email Exist: =>", emailExist);
})
如果您按 id 搜索,請嘗試這樣做:
const user = await User.findById(id);
Mongoose 的 findById 方法將 id 參數轉換為模型的 _id 字段的類型,以便它可以正確查詢匹配的文檔。
也嘗試檢查
if (id.match(/^[0-9a-fA-F]{24}$/)) { // Yes, it's a valid ObjectId, proceed with
call. }
findById call. }
call. }
或者
var mongoose = require('mongoose'); mongoose.Types.ObjectId.isValid('your id here');
嘗試:
await User.findOne({ _id: mongoose.Types.ObjectId(id) });
我遇到了同樣的問題,這就是我如何解決獲取我正在尋找的 Id 數據的方法。
const ObjectId = require('mongodb').ObjectId;
const id = '61929f3efc232d63cd9dcb6b';
user.findOne({ _id: ObjectId(id) })
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
這是我擁有的用戶信息數據
輸出:
{
_id: new ObjectId("61929f3efc232d63cd9dcb6b"),
name: 'Ibrahem',
email: 'I-A-H@hotmail.com',
age: 24,
createdAt: 2021-11-15T17:56:14.089Z,
updatedAt: 2021-11-15T17:56:14.089Z,
__v: 0
}
試試這個我希望這會奏效:
const {id} = req.params
await User.findOne({_id: ObjectId(id)})
您可以通過添加以下代碼開始調試問題,並嘗試檢查 mongoose 查詢是否傳遞了您傳遞的所有參數:
mongoose.set('debug', true);
我也遇到了類似的問題,我可以通過使用 _id 更新架構來解決它,如下所示:
_id: mongoose.Types.ObjectId
我使用 mongodb 版本 v6.0.0,這對我有用。
const User = mongoose.model("User", userSchema);
const userID="123123123123";
User.findOne({ _id: userID }, function (err, foundItem) {
console.log("foundItem: "+foundItem);
}
用戶ID類型:字符串
我希望它會工作
const { id } = req.params;
const user = await User.findById({ _id: id });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.