0

假设我有一个用户模式/模型,并且用户有一个朋友列表。Mongoose 希望您将您的朋友列表(外键/ObjectID 类型)存储为一个数组,对吗?这意味着如果我想通过 ID 找到我的朋友,Mongoose 将搜索数组,直到找到具有我想要的 ID 的朋友的第一个实例。那似乎真的时间效率低,不是吗?有没有更好的办法?

const FriendSchema = new Schema({
  username: { type: String, required: true, unique: true },
});

const UserSchema = new Schema({
  username: { type: String, required: true, unique: true },
  friends: [FriendSchema],
});
4

2 回答 2

0

我正在寻找的部分内容是:

索引允许您“迭代”通过数组或集合中的字段,而无需查看每一个。因此,为了确保您不会浪费时间进行迭代,您可以在任何字段上创建一个“索引”,并使其可以在二叉树结构中进行搜索。 https://docs.mongodb.com/manual/indexes/

数组已经被设置为将字段作为“键”,因此您无需担心通过其中一个元素的字段名称搜索数组的时间复杂度。 https://docs.mongodb.com/manual/core/index-multikey/

于 2020-11-29T13:52:07.550 回答
0

用于ref引用另一个模式中的文档并调用populate以获取引用的文档。

// friend.model.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const FriendSchema = new Schema({
  username: { type: String, required: true, unique: true },
});
module.exports = mongoose.model('Friend', FriendSchema);
// user.model.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const UserSchema = new Schema({
  username: { type: String, required: true, unique: true },
  friends: [{ type: Schema.Types.ObjectId, ref: 'Friend' }],
});
module.exports = mongoose.model('User', UserSchema);
const User = require('user.model.js');

User.find(...)
  .populate('friends')
  .exec()
于 2020-11-11T17:48:10.463 回答