【问题标题】:fetching data from other collections inside Mongoose find method从 Mongoose find 方法中的其他集合中获取数据
【发布时间】:2015-10-18 01:45:03
【问题描述】:

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

【问题讨论】:

  • 你能发布你的架构吗?
  • @RodrigoReis:我更新了我的问题。我的问题是属于每个用户的书籍应该有相同的用户_id? _id 可以重复吗?
  • 我已经在另一个问题上帮助你了 :)

标签: javascript node.js mongodb mongoose


【解决方案1】:

本质上,问题不在于 mongoose,而在于 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 在表中都需要是唯一的,但作为另一个文档的字段,它不需要是唯一的,除非您在该字段上放置了索引。

【讨论】:

  • 你知道,我只是想从 find 方法中的其他集合中获取一些信息。现在我的问题是属于每个用户的书应该有相同的用户_id? _id 可以重复吗?
  • 编辑了一个你可能会觉得有用的例子。
  • 谢谢,但我有一个问题。我想我知道为什么我很困惑。问题是:当我为用户保存新书时,我必须保存在两个地方,一个是它自己的集合,另一个是该用户的 own_books 数组。对吗?
  • :天哪!我在这个问题上已经一个多星期了,我认为这只是一种关系,在运行时和人口之后,拥有的书籍将被填满!这是我的错,但网络上关于此的文档和资源太差了!!不管怎样,谢谢我的朋友。我还有一个问题,如果你想你可以看一下,任何建议都可以节省我的时间我的朋友:stackoverflow.com/questions/31584142/…
猜你喜欢
  • 1970-01-01
  • 2018-08-21
  • 2016-06-20
  • 2020-07-31
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多