我正在使用Node.js和mongoose(mongodb)开发应用程序。有没有办法从除model population
之外的find方法中的其他集合中获取信息? population
与_id
合作,而我在其他收藏中的ID不能复制,我不能有一对多的关系。
例如,每个用户都有多本书。在图书模式_id
中,应该是重复的,并且其中一组具有相同的用户ID。但我不想要这个。我想比较其他领域。
我在Mongoose文档中阅读了document#population
,但我无法理解:
http://mongoosejs.com/docs/api.html#document_Document-populate
我无法相信这个简单的需求,Mongoose没有一个好的api。
这是我的架构:
var mongoose = require('mongoose');
var Users = require('../users');
var schema = new mongoose.Schema({
book_name: String,
book_publisher: String
});
var book = mongoose.model('book', schema);
module.exports = book;
和
var mongoose = require('mongoose');
var Book = require('../book');
var Schema = mongoose.Schema;
var schema = new mongoose.Schema({
user_name: String,
books: [{ type: Schema.Types.ObjectId, ref: 'Book' }]
});
var users = mongoose.model('users', schema);
module.exports = users;
答案 0 :(得分:0)
基本上,问题不在于猫鼬而是mongo。您尝试做的事情基本上是在非关系型数据库中提取关系数据。根据经验,我建议不要这样做。如果你无法避免,请使用postgres。 Postgres支持json数据。
在mongoose中,您可以使用.populate方法加载第一级关系(用户 - >帖子)。如果您想引入二级关系(用户 - >帖子 - >回复),那么您最终需要在代码中手动创建联接。 因此,如果用户有多本书,您可以设置这样的模式。
User = new mongoose.Schema({
//existing user properties
owned_books: [{type: mongoose.Schema.Types.ObjectId, ref: 'book'}]
}}
//now you can query users and populate their books by doing
Users.find().populate('owned_books').exec(callback)
编辑:它可以反过来,这本书有一组用户。在任何情况下,_id在表格中都必须是唯一的,但作为另一个文档的字段,它不需要是唯一的,除非您在该字段上放置索引。