使用 mongodb 嵌入集合

Posted

技术标签:

【中文标题】使用 mongodb 嵌入集合【英文标题】:Embed the collections using mongodb 【发布时间】:2016-02-23 18:24:31 【问题描述】:

我刚开始使用 mongodb 和 nodejs。我知道 mongodb 不支持连接。我只是将数据插入到 mongodb 中,我的文档看起来:


   "_id": ObjectId("564dacf84d52785c1d8b4567"),
    "content": "This blog created by karanSofat",
   "html": "<p>This blog created by karanSofat</p>\n",
 

现在用户在这个帖子上。应该是这样的:


   "_id": ObjectId("564dacf84d52785c1d8b4567"),
   "comments": [
     
       "name": "sumit",
       "email": "sumit@ggi.net",
       "comment": "this is also well for me",
       "posted_at": ISODate("2015-11-19T11:06:27.172Z") 
     
  ],
   "content"▼: "This blog created by karanSofat",
   "html": "<p>This blog created by karanSofat</p>\n", 

这是我的模型,

   //post model
// grab the mongoose module
var mongoose = require('mongoose');

// define our nerd model
// module.exports allows us to pass this to other files when it is called
module.exports = mongoose.model('post', 
    content : type : String, default: '',
    html : type : String, default: ''


);
//comment model
 var mongoose = require('mongoos
      module.exports = mongoose.model('comment', 
        name : type : String, default: '',
        email : type : String, default: '',
        comment : type : String, default: '',
        posted_at : type : date, default: ''

    );

我的问题是我不知道我使用 nodejs 以哪种方式插入 cmets 数据并且我的文档将嵌入。 这是我的代码:

app.post('/comments/:id', function(req, res) 
var Comment = require("../app/models/comments");//comment Model
var blog = require("../app/models/blog");//blog model

var id = req.params.id; //postId
var comments = JSON.parse(JSON.stringify(req.body)); //commentdata

//code Should be here

res.json(data:id,data2:input);
);

请帮忙

【问题讨论】:

你在用猫鼬吗?还是 mongodb 模块? @inspired:我在用猫鼬... 请发布../app/models/comments../app/models/blog 的架构。 @启发:我更新我的问题... @inspired:我解决了这个问题... 【参考方案1】:

卡兰,

假设您有以下架构:

var Comments = new Schema(
    name: String,
    email: String,
    comment: String,
  , posted_at: Date
);

var BlogPost = new Schema(
  content     : String,
  html      : String,
  comments  : [Comments],
);

mongoose.model('BlogPost', BlogPost);

您可以像这样将嵌入文档添加到数组中:

// retrieve my model
var BlogPost = mongoose.model('BlogPost');

// create a blog post
var post = new BlogPost();

// create a comment
post.comments.push(
   "name": "sumit",
   "email": "sumit@ggi.net",
   "comment": "this is also well for me",
   "posted_at": ISODate("2015-11-19T11:06:27.172Z") 
);

post.save(function (err) 
  if (!err) console.log('Success!');
);

【讨论】:

在我的例子中,有很多帖子和用户评论这些帖子。我想将 cmets 与帖子联系起来。

以上是关于使用 mongodb 嵌入集合的主要内容,如果未能解决你的问题,请参考以下文章

将 mongodb 集合项添加到不和谐嵌入

我应该使用单独的集合还是嵌入我知道不会用于所有模型的字段。 MongoDB

在 MongoDB 中搜索多个集合

MongoDB - 如何从集合中查询嵌入式文档

用于嵌入式集合的 MongoDB 首选模式。文档与数组

用 MongoDB 嵌入集合(子文档数组)违反 REST?