我只想从特定用户的联系人数组中删除一个联系人 使用nodejs从mongdb中动态
{
_id:ObjectId("532737785878v7676747788"),
firstname:"Mark",
lastname:"Anthony",
email:"xyz@gmail.com",
contacts:[
{
_id:ObjectId("678758478fr7889889)",
firstName:"James",
lastName:"Cole",
phoneNo:"09746"
},
{
_id:ObjectId("678758478fr7889889)"
firstName:"Jane"
lastName:"Doe"
phoneNo:"12345"
}
]
}
我尝试过:
User.updateOne(
{email:'xyz@gmail.com', 'contacts._id':678758478fr7889889},
{ $pull : { contacts : { firstName:'Jane', lastName:'Doe', phoneNo:'12345'} } },
{multi:true},
);
我没有收到任何错误消息,也没有删除任何联系人
答案 0 :(得分:0)
猫鼬会在写时使用已定义的架构在DB中创建ObjectId,但不会在_id(ObjectId's)上使用架构进行查找查询,因此,您必须明确地说_id是ObjectId()。请在您的代码中输入:
const mongoose = require('mongoose'); // Ignore this if you've already imported.
const ObjectId = mongoose.Types.ObjectId;
// Assuming id is the value you've got in request.
User.updateOne(
{email:'xyz@gmail.com', 'contacts._id':new ObjectId(id)},
{ $pull : { contacts : { firstName:'Jane', lastName:'Doe', phoneNo:'12345'} } });
// you can do the same with `findOneAndUpdate` with options {new: true} which would return updated document, by default it would be false that meant to return old document.
User.findOneAndUpdate(
{email:'xyz@gmail.com', 'contacts._id':new ObjectId(id)},
{ $pull : { contacts : { firstName:'Jane', lastName:'Doe', phoneNo:'12345'} } }, {new : true});
答案 1 :(得分:0)
db.collection.update({
email:'xyz@gmail.com',
contacts: {
$elemMatch: {
"_id": "678758478fr7889889"
}
}
}, {
$pull: {
contacts: {
_id: '678758478fr7889889'
}
}
}
)