Home > Software design >  mongoose return null in the query
mongoose return null in the query

Time:08-04

my mongodb has a collection with data like this

{
    "_id" : ObjectId("62ead2a8dd6922cfd6f466e4"),
    "t" : "d",
    "u" : {
        "_id" : ObjectId("621d3469dd01e282b9a62321"),
        "username" : "helxsz"
    },
    "users" : [ 
        ObjectId("621d3469dd01e282b9a62321"), 
        ObjectId("628ee99ed0a58e00496a0730")
    ],
    "createdAt" : ISODate("2022-08-03T19:55:20.965Z"),
    "updatedAt" : ISODate("2022-08-03T19:55:20.965Z")
}

I am using node.js and mongoose to query the document.

  let query = {
    u:{
      _id: "621d3469dd01e282b9a62321",
      username: "helxsz"
   },
   t:'d',
  };
      collection
        .findOne(query, 'u t ')
        .exec(getResult);

why the executed query returns null to me

CodePudding user response:

Maybe is because in your DB the u._id is ObjectId and in your query is a string. Mongoose should (?) parse it but I've faced not-parsed error like this many times.

So try parsing to ObjectId, in this example works.

Also an other problem is trying to search an object like this:

{
  u:{
    _id: "621d3469dd01e282b9a62321",
    username: "helxsz"
  }
}

Because in this way mongo looks for by the objects with the same order. You have to use dot notation

As an example, check how this query not work all times. To ensure the result you have to use dot notation:

let query = {
  "u._id": "621d3469dd01e282b9a62321", // maybe casting to ObjectId is necessary
  "u.username": "helxsz",
  t: "d"
}

Example here

More info about Match an Embedded/Nested Document

  • Related