【发布时间】:2020-09-24 08:22:14
【问题描述】:
我将 Node JS 与 Mongoose 一起使用,仅供参考。鉴于我有这样的事情:-
let people = [
{
"_id": 1,
"name": "Person 1",
"pets": [
{
"_id": 1,
"name": "Tom",
"category": "cat",
"favFood": [
{
"_id": 1,
"name": "steamed fish"
}
]
},
{
"_id": 2,
"name": "Jerry",
"category": "mouse",
"favFood": [
{
"_id": 1,
"name": "cheese"
}
]
}
]
}
]
现在我知道如何insert new pet 数据如下所示:-
// new Pet Data to INSERT
let newPetData = {
name: "Butch",
category: "dog",
favFood: [
{
name: "bone"
}
]
}
// INSERT new data in DB
People.updateOne(
// push into the sub-documents - pets
{ $push: { pets: newPetData } },
(err, success) => {
if(err) res.json({ message: `Unsuccessful!`, report: err })
else res.json({ message: `Successful!`, report: success })
}
)
但是,如果我有 id (宠物的 ID),我如何插入 pet 的新 favFood 数据?
let petID = 1 // this is the ID of pet named Tom
// this is a new favorite food of Tom to INSERT
let newFavFood = {
name: "fried fish"
}
// code to INSERT new favorite food of Tom (THIS DOES NOT WORK!)
People.updateOne(
{ "_id": petID } // id of pet 'Tom'
{ $push: { favFood: newFavFood } }, // push into the sub-documents - favFood
(err, success) => {
if(err) res.json({ message: `Unsuccessful!`, report: err })
else res.json({ message: `Successful!`, report: success })
}
)
上面的代码不起作用。我认为如果我指定{ "_id": petID } 上方的宠物的id 会产生我想要的。即使它返回 message 或 Successful!。但是 没有向 db 本身添加新记录。我正在寻找的结果将是如下所示:-
let people = [
{
"_id": 1,
"name": "Person 1",
"pets": [
{
"_id": 1,
"name": "Tom",
"category": "cat",
"favFood": [
{
"_id": 1,
"name": "steamed fish"
},
{
"_id": 2,
"name": "fried fish" // this is the new data inserted
}
]
},
{
"_id": 2,
"name": "Jerry",
"category": "mouse",
"favFood": [
{
"_id": 1,
"name": "cheese"
}
]
}
]
}
]
有没有其他方法可以做到这一点?我必须在此实施$elemMatch 吗?如果是这样,我该怎么做?
【问题讨论】:
标签: arrays mongodb nested mongodb-query insert-update