我正在将Node JS与Mongoose fyi一起使用。鉴于我有这样的事情:-
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
新的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 })
}
)
但是如果我有favFood
(宠物的ID)],我该如何插入pet
的新id
数据?
本身未添加新记录。我要寻找的结果将是如下所示的内容:-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
所示的宠物的{ "_id": petID }
,将产生我想要的东西。即使返回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
吗?如果是这样,我该怎么办?
我正在将Node JS与Mongoose fyi一起使用。鉴于我有这样的事情:-let people = [{“ _id”:1,“ name”:“ Person 1”,“ pets”:[{“ _id”:1,...
查询部分匹配文档,而不匹配元素,因此{ "_id": petID }
匹配该人的_id。要匹配宠物,请使用点分符号,例如{ "pets._id": petID }