Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 我可以使用NoSQL而不是关系数据库吗?_Mongodb_Nosql - Fatal编程技术网

Mongodb 我可以使用NoSQL而不是关系数据库吗?

Mongodb 我可以使用NoSQL而不是关系数据库吗?,mongodb,nosql,Mongodb,Nosql,对于图书馆,我需要跟踪用户和书籍。基本上我需要知道: 用户当前借阅的书籍列表 一本书的当前借阅者 该应用程序使用node.js和mongoDB(使用moogoose)完成。我有以下模式: BookSchema = new Schema({ title : String, author : String, current_borrower_email: String, }); mongoose.model('Book', BookSchema); // Define

对于图书馆,我需要跟踪用户和书籍。基本上我需要知道:

  • 用户当前借阅的书籍列表
  • 一本书的当前借阅者
该应用程序使用node.js和mongoDB(使用moogoose)完成。我有以下模式:

BookSchema = new Schema({
  title        : String,
  author : String,
  current_borrower_email: String,
});
mongoose.model('Book', BookSchema);

// Define User model
UserSchema = new Schema({
  lastname  : String,
  firstname  : String,
  email     : String,
  books    : [BookSchema]  // Books the user is borrowing
});
mongoose.model('User', UserSchema);
我想在关系数据库中设置它会更简单,我可以轻松地使用外键的多对多关系,但我想尝试一下MongoDB


你认为这个解决方案行得通吗?另外,如果我删除一个Book对象,似乎我必须手动将其从借用它的用户数组中删除,对吗?

一般来说,mongodb将很好地替代关系数据库来完成上述任务

所以一些基础知识:
1.一旦有人拿了一本书,您只需将该书复制到用户和用户的嵌套集合中即可。
2.一旦用户更新了他的个人资料,您还需要更新书本中关于用户的信息。
3.图书数据更改后,您还需要更新用户内的图书信息。
4.如果您试图删除某本书,而当前借款人存在,则应说明该书是由“用户”借用的,而不是将其删除

我只是建议添加到您的模式中,而不是
current\u follower\u email
entill
User
object->
current\u follower:UserSchema

因此,使用这种非规范化模式,您将能够轻松显示(在对mongodb的一个请求中):

  • 用户当前所借图书的列表
  • 一本书的当前借阅者

这是一个老问题,但它在谷歌是第一个问题,所以。。。 它不太复杂,但太长了,无法总结。 请阅读以下内容:

关于删除时的级联:请参阅以获取参考如果您喜欢多对多关系实现ib relational DB,您可以在mongodb中使用名为
借用的附加表来模拟它,该表将用户和书籍关联起来。顺便说一句,您当前的实现没有记录归还的借书?我认为你目前的模式在现实生活中不起作用。你是对的,它目前没有被考虑,这只是模式的基础。我只是研究这件事,没有走多远,只是想看看NoSQL是否适合我的需要。你说得对,我可能会选择一张额外的桌子。@Luc:为什么是多对多?使用上面提供的模式,似乎只有一个用户可以阅读某些特定的书籍。我错过了什么?在DB世界中,大多数人将图形/对象DB(如蒙戈)视为关系数据库的功能超集,因此,在大多数情况下,可以使用Mango作为替代,主要关注的是:性能、安全性、DB适配器和稳定性。玩得开心,尝试新技术总是好的。就我个人而言,我认为mongoDB还不够成熟,但它有望取代关系数据库。@andrew orsich,好的,谢谢你证实我的观点。否则,对于多对多关系(Winfred comments)的附加表,您怎么看?我想这真的很有帮助。@Luc:关于monodb中的附加表--否,再次强调,否。如果您想要附加表,请使用sql完成任务。@andrew orsich,好的,明白了。另外,如果我使用current_booker:UserSchema,会不会因为用户也有书籍:[BookSchema]而存在循环风险?此外,我还记得我尝试过“property:Schema”,但它似乎不起作用(只有properties:[Schema])。有什么想法吗?@Luc:一切都会好起来的。我不知道如何在猫鼬中做到这一点,我是.net的家伙;)。