我正在用node js和vue制作约会应用程序,并且一切正常,但是我希望排除在创建对话后将密码插入子文档中的可能性。现在,我知道我可以在使用.select('-password')
时说User.findOne()
,但是当将用户架构作为子文档添加到我的“对话”架构时,它没有用,它具有user_one和user_two,每个都引用用户架构。我需要密码字段,因此在创建架构时不能忽略它。现在,我的代码如下:
User.findOne({ _id: fromUserId }, (errUserOne, userOne) => {
User.findOne({ _id: toUserId }, (errUserTwo, userTwo) => {
conversation = new Conversation({
_id: mongoose.Types.ObjectId(),
user_one: userOne,
user_two: userTwo
});
conversation.save();
const message = new Message({
_id: mongoose.Types.ObjectId(),
conversation_id: conversation._id,
message: req.body.message,
user_id: fromUserId
});
message.save();
res.sendStatus(201);
});
});
但是此代码将密码保存到“对话”集合中,我不需要。
答案 0 :(得分:0)
User.find({ _id: :{ $in : [fromUserId,toUserId] }, { password:0 } , (err, userArray) => {
//your code goes here
});
两件事,您要查询两次以获取用户。您可以将其合并为单个查询,并且要排除密码字段,可以传递{password:0}
。它将排除在文档之外。
在定义Conversation
模式时,也不要使user_one
和user_two
类型的用户。而是只定义要保存的用户的任何属性,例如:
var Conversation = new Schema({
_id : ObjectId,
user_one : {
_id: ObjectId,
//all other fields
},
user_two : {
_id: ObjectId,
//all other fields
},
});