簡體   English   中英

為什么 findOne({ id }) 在 mongoose 6.012 中不能正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM