Запрос суб-документа суб-документа в мангусте - PullRequest
0 голосов
/ 26 февраля 2019

Я хотел сохранить данные в «messageSchema», который является вложенным документом chatSchema, проверив «получатель» chatSchema и «username» userSchema.

как псевдо-код: -

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 голосов
/ 26 февраля 2019

Я думаю, вам нужно использовать $elemMatch вместо точечной нотации для сопоставления свойств в массиве.Попробуйте это:

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

...