猫鼬与自定义字段的关系

ale*_*ver 2 mongoose node.js

我见过很多关于猫鼬和关系的例子,但是如何在自定义字段中创建对另一个实体的引用?

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
mongoose.connection.once('open', function(){

  var Author = m.model('Author', new m.Schema({
    name: String,
    slugname: String
  }));
  var Book = m.model('Book', new m.Schema({
    title: String,
    author: {type: String, ref: 'Author.slugname'}
  }));

});
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我将 Book.author 链接到 Author.slugname。只是我不知道这是不是正确的做法。

Fro*_*y Z 6

从Mongoose 4.5开始就支持这一点,称为虚拟群体

检查我对这个(几乎重复)问题的详细回答


Leo*_*tny 5

不,你不能。Mongoose 总是使用_id字段来链接文档。但...

_id您可以使用您想要的任何数据类型为每个文档设置自己的数据类型。只有两个限制:

  • 它应该是独一无二的
  • 在文档的生命周期内不应更改它

因此,不要添加新slugname字段,而是使用作者_id作为 slugname:

var Author = m.model('Author', new m.Schema({
  _id: String, // <-- slugname
  name: String
}));
var Book = m.model('Book', new m.Schema({
  title: String,
  author: { type: String, ref: 'Author' }
}));
Run Code Online (Sandbox Code Playgroud)