Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mixing populated query results with model objects #570

Closed
DaBlick opened this issue Oct 20, 2011 · 5 comments
Closed

Mixing populated query results with model objects #570

DaBlick opened this issue Oct 20, 2011 · 5 comments
Labels
confirmed-bug We've confirmed this is a bug in Mongoose and will fix it.

Comments

@DaBlick
Copy link

DaBlick commented Oct 20, 2011

I have a Schema sorta like this (abbreviated here):

var Comment = module.exports = new Schema({
  , teacher :   { type: Schema.ObjectId, index: true, ref: 'User'}

var StudentProfile = module.exports = new Schema({
  , comments : [Comment]

Here's my code to add a new comment. You can presume that std contains the result of a query like

       db.model('StudentProfile').findById(id).populate("comment")

And now I execute this code:

        var comment = new Comment;
        comment.teacher    = ~~~ some User object

        std.comments.push(comment);

        std.save(function (err) {...}

        res.render('reporting/_comment', {
            'comments' : std.comments,

Assume there is already one Comment and I'm pushing a second one.

Here's what std.comments look likes at the render call

   [ {teacher : {User object}},
     {teacher : id of User object} }   <--- Newly pushed comment

What you can see here is that the pre-existing Comment from the query result is populated, but the new one is not.

With the advent of the populate feature this kind of scenario is not going to be uncommon and it would be quite nice if the model objects the mongoose magic that turns comment.teacher back into an id was transparent.

@ironstrider
Copy link

I've encountered this issue as well, and it is mighty frustrating. Any word on a fix?

@aheckmann
Copy link
Collaborator

relates to #601

@pykler
Copy link

pykler commented Nov 26, 2012

If there was a manual_populate method, it might solve some of these issues ... another solution would be instead of having:

comment_obj.teacher = teacher_obj

Automagically just keep the teacher_obj._id and leave the whole obj ... it would keep the full teacher_obj but when saving checks the schema and then only saves the teacher_obj._id at that point.

@braunsquared
Copy link

+1 Needs to be consistent. Either store the field as an id always or an object. Preference would be an id, with a call to a populate like call that returns the object if present.

aheckmann added a commit that referenced this issue Feb 2, 2013
without casting

need to test string,number,buffer _ids yet

part of #570
aheckmann added a commit that referenced this issue Feb 3, 2013
without casting

need to test string,number,buffer _ids yet

part of #570
aheckmann added a commit that referenced this issue Feb 3, 2013
when null or ObjectId was added

relates to #570
aheckmann added a commit that referenced this issue Feb 3, 2013
add tests for docs with String, Buffer, and Number _ids

relates to #570
aheckmann added a commit that referenced this issue Feb 3, 2013
aheckmann added a commit that referenced this issue Feb 3, 2013
also fixes legacy issue where single populated path
was markedModified causing populated document to
overwrite _id.

relates to #570
aheckmann added a commit that referenced this issue Mar 2, 2013
without casting

need to test string,number,buffer _ids yet

part of #570
aheckmann added a commit that referenced this issue Mar 2, 2013
when null or ObjectId was added

relates to #570
aheckmann added a commit that referenced this issue Mar 2, 2013
add tests for docs with String, Buffer, and Number _ids

relates to #570
aheckmann added a commit that referenced this issue Mar 2, 2013
aheckmann added a commit that referenced this issue Mar 2, 2013
also fixes legacy issue where single populated path
was markedModified causing populated document to
overwrite _id.

relates to #570
aheckmann added a commit that referenced this issue Mar 7, 2013
Setting a populated path (or manipulate a populated array) with
works when the schema path does not have a `ref` declared and
an adhoc model was used for population.

relates to #570
@aheckmann
Copy link
Collaborator

fixed in 3.6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
confirmed-bug We've confirmed this is a bug in Mongoose and will fix it.
Projects
None yet
Development

No branches or pull requests

5 participants