javascript - 在mongoose中查询子文档的子文档
问题描述
我想通过检查chatSchema的“接收者”和userSchema的“用户名”将数据保存在chatSchema的子文档“messageSchema”中。
像伪代码:-
if(userSchema.username == "Rahul" && userSchema.chatSchema.receiver){
then save the data in chatSchema.message;
}
这是我的架构:-
var messageSchema = mongoose.Schema({
messageId: {type: String, unique: true, required: true},
created: {type: Date, default: Date.now},
messageContent: String
});
var chatSchema = mongoose.Schema({
message: [messageSchema],
receiver: {type: String, required: true}
});
var userSchema = mongoose.Schema({
username: { type: String, unique: true, required: true },
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
token: { type: String, required: false },
conversations: [chatSchema]
});
请建议保存消息数据的代码。试过下面一个不起作用。
User.findOneAndUpdate({username: "rahul", "conversations.receiver": data.receiver },{$push: {"conversations.message": message}});
解决方案
我认为您需要使用$elemMatch
而不是点符号来匹配数组中的属性。尝试这个:
User.findOneAndUpdate(
{
username: "rahul",
conversations: {
$elemMatch: { receiver: data.receiver }
}
},
// or whatever your update is
{$push: {"conversations.message": message}
})
推荐阅读
- django - Django Rest Framework 基本身份验证与 Apache 2.4 基本身份验证 - 我的 API 请求在哪里进行身份验证?
- android - 可触摸不适用于位置:绝对
- vue.js - Vue-cli 全局更改对象值
- visual-studio-code - 如何在 Visual Studio Code 中使用 Flutter 的 Widget Inspector?
- ios - swift:守卫“让自我= ...”的快捷方式?
- node.js - 对于 angular 4 的现有项目,安装 npm 失败
- pdf - Datatable 将通用数据导出到表外
- javascript - PaperJS如何在组项目中找到离鼠标事件最近的项目
- swift4.2 - Swift 4.2.1 使用 Xcode 10.1 请求 JSON
- postgresql - 替换二维数组中的元素