MongoDB-有更好的方法来存储ObjectID列表吗



假设我有一个用户模式/模型,用户有一个朋友列表。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],
});

我想要的部分内容是:

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

数组已经被制作成使字段为"0";键";因此,您不必担心根据数组中某个元素的字段名搜索数组的时间复杂性。https://docs.mongodb.com/manual/core/index-multikey/

使用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()

最新更新