это моя схема:
new Schema({
code: { type: String },
toy_array: [
{
date:{
type:Date(),
default: new Date()
}
toy:{ type:String }
]
}
это моя база данных:
{
"code": "Toystore A",
"toy_array": [
{
_id:"xxxxx", // automatic
"toy": "buzz"
},
{
_id:"xxxxx", // automatic
"toy": "pope"
}
]
},
{
"code": "Toystore B",
"toy_array": [
{
_id:"xxxxx", // automatic
"toy": "jessie"
}
]
}
Я пытаюсь обновить объект. В этом случае я хочу обновить документ с помощью code: 'ToystoreA'
и добавить массив поддокументов в массив с именем toy_array
, если игрушки не существуют в массиве.
, например, если я попытаюсь сделать это :
db.mydb.findOneAndUpdate({
code: 'ToystoreA,
/*toy_array: {
$not: {
$elemMatch: {
toy: [{"toy":'woddy'},{"toy":"buzz"}],
},
},
},*/
},
{
$addToSet: {
toy_array: {
$each: [{"toy":'woddy'},{"toy":"buzz"}],
},
},
},
{
new: false,
}
})
они добавлены, и это то, чего я хочу избежать.
как я могу это сделать?
[
{
"code": "Toystore A",
"toy_array": [
{
"toy": "buzz"
},
{
"toy": "pope"
}
]
},
{
"code": "Toystore B",
"toy_array": [
{
"toy": "jessie"
}
]
}
]
В этом примере [{"toy":'woddy'},{"toy":"buzz"}]
должно быть добавляется только 'woddy'
, потому что 'buzz'
уже находится в массиве.
Примечание: когда я вставляю новый toy
, в дополнение к _id также вставляется дата вставки (это нормально для меня ).