gpt4 book ai didi

node.js - 具有一对多关系的 Mongoose 文档引用

转载 作者:IT老高 更新时间:2023-10-28 11:05:18 34 4
gpt4 key购买 nike

我正在为一个新项目设计数据库结构,而且我对 MongoDB 很陌生,显然是 Mongoose。

我读过 Mongoose population文档,它具有一对多的关系,一个 Person 文档到多个 Story 文档,但让我感到困惑的部分是 where 而不是 Story 文档引用了它所属的 Person 文档,Person 架构对其进行了设置,因此它具有 Story 文档的数组它“拥有”。

我正在设置与此非常相似的东西。但我一直认为在创建新的 Story 文档以具有 Person 文档 ID 时会更容易。但也许那只是因为我更熟悉使用连接的 MySQL 关系。

如果这是最好的方法(我确信它是,因为它在文档中),当创建新的 Story 文档时,更新数组的最佳方法是什么它所属的相关 People 文档中的故事?我查看但找不到任何更新现有文档以添加对其他文档的引用(或就此删除它们)的示例

我确定这是一个我刚刚忽略的简单解决方案,但任何帮助都会很棒。谢谢!

最佳答案

请参阅 population ,这里摘录一个Mongoose的例子。

var mongoose = require('mongoose')
, Schema = mongoose.Schema

var personSchema = Schema({
_id : Schema.Types.ObjectId,
name : String,
age : Number,
stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});

var storySchema = Schema({
_creator : { type: Schema.Types.ObjectId, ref: 'Person' },
title : String,
fans : [{ type: Schema.Types.ObjectId, ref: 'Person' }]
});

var Story = mongoose.model('Story', storySchema);
var Person = mongoose.model('Person', personSchema);

所以关于 Story 模型的示例将相关的 Person._id 存储在 Story._creator 中。当你找到一个 Story 的文档时,你可以使用 populate() 方法来定义你想要同时检索 Person 模型中的哪个属性时间,如:

Story.findOne({_id: 'xxxxxxx'}).populate('person', 'name age').exec(function(err, story) {
console.log('Story title: ', story.title);
console.log('Story creator', story.person.name);
});

我相信这就是您要找的。否则,您可以使用 nested collections而是。

关于node.js - 具有一对多关系的 Mongoose 文档引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34985846/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com