简体   繁体   中英

Querying sub document of sub document in mongoose

I wanted to save the data in "messageSchema" which is sub document of chatSchema by checking the "receiver" of chatSchema and "username" of userSchema.

like pseudoCode:-

if(userSchema.username == "Rahul" && userSchema.chatSchema.receiver){
then save the data in chatSchema.message;
}

Here is my Schema:-

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

please suggest what should be code to save the message data. tried below one that didn't work.

User.findOneAndUpdate({username: "rahul", "conversations.receiver": data.receiver },{$push: {"conversations.message": message}});

I think you need to use $elemMatch instead of the dot notation for matching properties within an array. Try this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM