在猫鼬中查询子文档的子文档

时间:2019-02-26 17:49:32

标签: javascript node.js mongodb mongoose mongoose-schema

我想通过检查chatSchema的“接收者”和userSchema的“用户名”,将数据保存在chatSchema的子文档“ messageSchema”中。

like伪代码:-

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}});

1 个答案:

答案 0 :(得分:0)

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

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