Query Mongoose Schema by ObjectId

会有一股神秘感。 提交于 2019-12-07 15:32:44

问题


Going to need your help again, hopefully for this project, the answer to what I'm having here will be the last. I've seen it's a fairly commonly asked question, but I've tried the tips on another Stack Overflow post, and one by the Google Group, but the solutions haven't worked for me.

My code being a little bit like:

mongoose = require('mongoose');
Schema = mongoose.Schema;
mongoose.connect(MONGO_SERVER);
ObjectId = Schema.ObjectId;

var RacesSchema = new Schema({
    venue_id        : { type: mongoose.Schema.ObjectId, ref: 'Venues' },
    racetype            : String
});
var races = mongoose.model('Races', RacesSchema );

function test() {
    var MyObjectId = require('mongoose').Types.ObjectId;
    queryVenue = new MyObjectId("50e3dcdbf30375180c078f64");

    races.find({venue_id: queryVenue, racetype:'Test'})
    .exec(function(err,data) {
}

test();

But I get no results, which I know there is.

Many thanks in advance!

UPDATE

Have minimized the above code sample, this test works if I query the string value on its own, just querying for an ObjectId is where it fails, and I know it exists.

JSON UPDATE

Here is what I am looking for:

{
    "_id" : ObjectId("50e3dcddf30375180c078f85"),
    "venue_id" : "50e3dcdbf30375180c078f64",
    "racetype" : "A"
}

And all of a sudden, I believe my answer has become clear to me. Is it simply because the venue_id is actually a string? And if so, can I keep my mongoose schema the way it is, and do casting on the query at the point of doing the find of being a string? Or should I change the way these values are being stored (from a separate .net application I developed) to be inserted as ObjectId's?

Currently right now for another query, the current mongoose schema and the way the database is [actually set up], using populate() works quite well to fill the results of the referenced table (venue_id) with the way this model is currently set up, only difference being on the above query, I don't specify the venue_id...

Thanks.


回答1:


Right, the problem is happening because the data type of venue_id in the schema (ObjectId) doesn't match the one in the doc (String). So the find is looking for ObjectId values but doesn't find a match because it's a string in the doc.

The right fix for this is to write a little program to update the venue_id values in your docs to be ObjectIds instead of strings and then your query will work. That will also shrink the size of those fields from 24 bytes to 12.



来源:https://stackoverflow.com/questions/15003010/query-mongoose-schema-by-objectid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!