首页 > 解决方案 > 在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}});

标签: javascriptnode.jsmongodbmongoosemongoose-schema

解决方案


我认为您需要使用$elemMatch而不是点符号来匹配数组中的属性。尝试这个:

User.findOneAndUpdate(
  {
    username: "rahul",
    conversations: {
      $elemMatch: { receiver: data.receiver }
    }
  },
  // or whatever your update is
 {$push: {"conversations.message": message}
})


推荐阅读