我有一个有todolists字段的用户模型,在todolists字段中我希望通过id获取特定的todolist。我的查询是这样的:
User.find({_id: user._id, _creator: user, todoList: todoList._id}, 'todoLists') // how do I query for todoList id here? I used _creator this on populate query.
我还可以在这样的Usermodel字段上进行搜索吗?
User.todoLists.find({todoList: todoList._id})
我还没有测试过这个,因为我还在修改我的Graphql架构,我是mongoose的新手。我非常感谢链接和建议。帮助
答案 0 :(得分:2)
假设您的模型如下:
const todoListSchema = new Schema({
item: { type: String },
}, { collection: 'todolist' });
const userSchema = new Schema({
todoList: [todoListSchema],
}, { collection: 'user' });
mongoose.model('user', userSchema);
mongoose.model('todoList', todoListSchema);
现在您有多种方法可以做到这一点:
<强> 1。使用数组filter()方法 reference
User.findById(_id, (err, user) => {
const todoList = user.todoList.filter(id => id.equals(tdlId));
//your code..
})
<强> 2。使用mongoose id()方法 reference
User.findById(_id, (err, user) => {
const todoList = user.todoList.id(tdlId);
//your code..
})
第3。使用猫鼬聚合 reference
User.aggregate(
{ $match: { _id: userId} },
{ $unwind: '$todoList' },
{ $match: { todoList: tdlId } },
{ $project: { todoList: 1 } }
).then((user, err) => {
//your code..
}
});