我的Mongoose架构:
// set up the schema
var CategorySubSchema = new Schema({
name: { type: String },
_category_main : { type: String, ref: 'CategoryMain' }
},
我的控制器代码:
CategorySub.create({
name : req.body.name,
_category_main : req.body.category_main
}, function(err, data){
我的数据库中的条目:
{
"_id": "54dd163434d78ae58f6b1a69",
"name": "Snacks",
"_category_main": "54dcf4a71dfecb4d86ddcb87",
"__v": 0
},
所以我使用了下划线,因为我跟随了一个例子。这对数据库意味着什么,还是只是引用的约定?
此外,不是在请求中传递整个JSON对象 - req.body.category_main
,为什么不通过和id
并将我的架构更改为此?:
var CategorySubSchema = new Schema({
name: { type: String },
category_main_id : { type: String }
},
答案 0 :(得分:0)
简而言之,是的。
以下架构定义是Manual references的一个示例。
var CategorySubSchema = new Schema({
name: { type: String },
category_main_id : { type: String }
}
其中,
将一个文档的
_id
字段另存为另一个文档 参考。然后您的应用程序可以运行第二个查询以返回 相关数据。这些参考文献简单且足以满足大多数用途 例。
在这种情况下,我们需要编写显式应用程序代码来获取引用的文档并解析引用。由于我们使用的驱动程序不知道所引用文档所在的集合,也不知道所引用文档所在的数据库。
如下所示定义架构时,这是存储引用文档的详细信息的示例。(Database references)
var CategorySubSchema = new Schema({
name: { type: String },
_category_main : { type: String, ref: 'CategoryMain' }
}
它们包括集合的
name
,在某些情况下还有。{1}} 数据库名称,以及_id
字段的值。
这些细节允许各种驱动程序自己解析引用,因为引用文档的集合名称和数据库(可选)将包含在文档本身中,而不是我们编写显式应用程序代码来解析引用
所以我使用了下划线,因为我跟随了一个例子。这对数据库意味着什么,还是只是惯例 引用?
在_id
字段中使用下划线是一种有效的命名约定,但mongoDb
并未明确提及用于解析引用的其他字段的命名约定。您可以使用任何其他字段名称,只要它符合this。