【问题标题】:Mongoose embedded documents / DocumentsArrays idMongoose 嵌入文档/DocumentsArrays id
【发布时间】:2012-02-18 03:53:45
【问题描述】:

在以下地址的 Mongoose 文档中: http://mongoosejs.com/docs/embedded-documents.html

有一个说法:

DocumentArrays 有一个特殊的方法 id 可以过滤你嵌入的 _id 属性的文档(每个嵌入的文档都有一个):

考虑以下 sn-p:

 post.comments.id(my_id).remove();
  post.save(function (err) {
    // embedded comment with id `my_id` removed!
  });

我查看了数据,没有嵌入文档的 _id,这似乎已被这篇文章证实:

How to return the last push() embedded document

我的问题是:

文档是否正确?如果是这样,那么我如何首先找出'my_id'是什么(在示例中)来执行 '.id(my_id)'

如果文档不正确,使用索引作为文档数组中的 id 是否安全,或者我应该手动生成唯一的 ID(根据提到的帖子)。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    而不是使用这样的 json 对象执行 push()(猫鼬文档建议的方式):

    // create a comment
    post.comments.push({ title: 'My comment' });
    

    您应该创建一个嵌入对象的实际实例,并改为使用push()。然后你可以直接从中获取_id字段,因为mongoose在对象实例化时设置它。这是一个完整的例子:

    var mongoose = require('mongoose')
    var Schema = mongoose.Schema
    var ObjectId = Schema.ObjectId
    
    mongoose.connect('mongodb://localhost/testjs');
    
    var Comment = new Schema({
        title     : String
      , body      : String
      , date      : Date
    });
    
    var BlogPost = new Schema({
        author    : ObjectId
      , title     : String
      , body      : String
      , date      : Date
      , comments  : [Comment]
      , meta      : {
            votes : Number
          , favs  : Number
        }
    });
    
    mongoose.model('Comment', Comment);
    mongoose.model('BlogPost', BlogPost);
    
    var BlogPost = mongoose.model('BlogPost');
    var CommentModel = mongoose.model('Comment')
    
    
    var post = new BlogPost();
    
    // create a comment
    var mycomment = new CommentModel();
    mycomment.title = "blah"
    console.log(mycomment._id) // <<<< This is what you're looking for
    
    post.comments.push(mycomment);
    
    post.save(function (err) {
      if (!err) console.log('Success!');
    })
    

    【讨论】:

    • 谢谢 - 所以我很清楚:你是说 _id 是实例化的“评论”(嵌入文档)的属性,但不一定是数据库中的“字段”?在我的数据中,我没有仅适用于模型的嵌入文档的 _id 字段。
    • 但这不会使它们成为单独的实例吗?如果更新评论模型,是否会反映博客模型的变化?
    猜你喜欢
    • 2015-02-28
    • 2023-03-22
    • 2015-07-17
    • 2012-08-26
    • 2014-06-12
    • 2023-03-10
    • 2022-10-16
    • 2015-09-14
    • 2011-12-21
    相关资源
    最近更新 更多