从Mongoose find方法中的其他集合中获取数据

时间:2015-07-27 18:21:24

标签: javascript node.js mongodb mongoose

我正在使用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;

1 个答案:

答案 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在表格中都必须是唯一的,但作为另一个文档的字段,它不需要是唯一的,除非您在该字段上放置索引。