Mongoose: CastError: Cast to ObjectId failed for value “[object Object]” at path “_id”

前端 未结 13 1975
再見小時候
再見小時候 2020-11-30 01:24

I am new to node.js, so I have a feeling that this will be something silly that I have overlooked, but I haven\'t been able to find an answer that fixes my problem. What I\'

相关标签:
13条回答
  • 2020-11-30 02:04

    I've faced this error, That was because the value you want to filter in the _id field is not in an ID format, one "if" should solve your error.

    const mongoose = require('mongoose');
    
    console.log(mongoose.Types.ObjectId.isValid('53cb6b9b4f4ddef1ad47f943'));
    // true
    console.log(mongoose.Types.ObjectId.isValid('whatever'));
    // false
    

    To solve it, always validate if the criteria value for search is a valid ObjectId

    const criteria = {};
    criteria.$or = [];
    
    if(params.q) {
      if(mongoose.Types.ObjectId.isValid(params.id)) {
        criteria.$or.push({ _id: params.q })
      }
      criteria.$or.push({ name: { $regex: params.q, $options: 'i' }})
      criteria.$or.push({ email: { $regex: params.q, $options: 'i' }})
      criteria.$or.push({ password: { $regex: params.q, $options: 'i' }})
    }
    
    return UserModule.find(criteria).exec(() => {
      // do stuff
    })
    
    0 讨论(0)
  • 2020-11-30 02:04

    For the record: I had this error trying to fill a subdocument in a wrong way:

    {
    [CastError: Cast to ObjectId failed for value "[object Object]" at path "_id"]
    message: 'Cast to ObjectId failed for value "[object Object]" at path "_id"',
    name: 'CastError',
    type: 'ObjectId',
    path: '_id'
    value:
      [ { timestamp: '2014-07-03T00:23:45-04:00',
      date_start: '2014-07-03T00:23:45-04:00',
      date_end: '2014-07-03T00:23:45-04:00',
      operation: 'Deactivation' } ],
    }
    

    look ^ value is an array containing an object: wrong!

    Explanation: I was sending data from php to a node.js API in this way:

    $history = json_encode(
    array(
      array(
      'timestamp'  => date('c', time()),
      'date_start' => date('c', time()),
      'date_end'   => date('c', time()),
      'operation'  => 'Deactivation'
    )));
    

    As you can see $history is an array containing an array. That's why mongoose try to fill _id (or any other field) with an array instead than a Scheme.ObjectId (or any other data type). The following works:

    $history = json_encode(
    array(
      'timestamp'  => date('c', time()),
      'date_start' => date('c', time()),
      'date_end'   => date('c', time()),
      'operation'  => 'Deactivation'
    ));
    
    0 讨论(0)
  • 2020-11-30 02:09

    Had the same problem, I just coerced the id into a string.

    My schema:

    const product = new mongooseClient.Schema({
        retailerID: { type: mongoose.SchemaTypes.ObjectId, required: true, index: true }
    });
    

    And then, when inserting:

    retailerID: `${retailer._id}`
    
    0 讨论(0)
  • 2020-11-30 02:12

    My solution is that i want data from all docs and i dont want _id, so

    User.find({}, {_id:0, keyToShow:1, keyToNotShow:0})
    
    0 讨论(0)
  • 2020-11-30 02:13

    I was receiving this error CastError: Cast to ObjectId failed for value “[object Object]” at path “_id” after creating a schema, then modifying it and couldn't track it down. I deleted all the documents in the collection and I could add 1 object but not a second. I ended up deleting the collection in Mongo and that worked as Mongoose recreated the collection.

    0 讨论(0)
  • 2020-11-30 02:15

    I also encountered this mongoose error CastError: Cast to ObjectId failed for value \"583fe2c488cf652d4c6b45d1\" at path \"_id\" for model User

    So I run npm list command to verify the mongodb and mongoose version in my local. Heres the report: ......
    ......
    ├── mongodb@2.2.19
    ├── mongoose@4.7.2
    .....

    It seems there's an issue on this mongodb version so what I did is I uninstall and try to use different version such as 2.2.16

    $ npm uninstall mongodb, it will delete the mongodb from your node_modules directory. After that install the lower version of mongodb.
    $ npm install mongodb@2.2.16
    Finally, I restart the app and the CastError is gone!!

    0 讨论(0)
提交回复
热议问题