Table Reference In Mongodb



我有两个模型1:UserSchema &2: todo

const userSchema = new mongoose.Schema {
name: String,
email: String,
todo: { desc }  
}
const todoSchema = new mongoose.Schema {
id: id,
desc : String
}

我的查询是,我想获取基于id的用户的todo从on "todo"集合。

我的最终结果将是:

{
_id: new ObjectId("63a73aded28fd96ab66a9f30"),
name: 'world',
email: 'world@gmail.com',
todo: [],
__v: 0,
}

如何使用mongodb获得todo数据?

MongoDB或一般的文档数据库与关系数据库(如MySQL, PostgreSQL等)不同,因为MongoDB不像关系数据库那样本地支持关系。然而,mongoose (MongoDB在node.js中的ODM)和它的模型有一种使用模型引用来表示关系的方法。所以,你的模型将是:

const userSchema = new mongoose.Schema{ name: String, email: String, todo: { type: Schema.Types.ObjectId, ref: 'Todo' } }
const todoSchema = new mongoose.Schema{ desc : String }
const User = mongoose.model('User', userSchema);
const Todo = mongoose.model('Todo', todoSchema);

要获取用户和populatetodo,您可以在mongoose

中执行以下查询
const user = await User.findById(id).populate('todo')

我还建议您浏览mongoose关于填充函数的文档https://mongoosejs.com/docs/populate.html

要直接在MongoDB上执行查询而不使用mongoose,您可以使用聚合执行以下查询。

db.users.aggregate([
{
"$match": {
"_id": 1
}
},
{
"$lookup": {
"from": "todos",
"localField": "todo",
"foreignField": "_id",
"as": "todo"
}
}])

最新更新