我有两个模型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);
要获取用户和populate
的todo
,您可以在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"
}
}])