我已经研究过如何在stackoverflow和meteor论坛上删除mongodb / meteor中嵌入文档的问题。但是我无法弄清楚为什么$ pull不适合我。
几天来一直陷入这个问题。我有一个看起来像这样的集合。
{
"_id": "N6QAJQpq4p5aYbpev",
"name": "Test Project",
"description": "description here",
"organization": "xPtaobSBQwxCKAJLN",
"members": [
{
"id": "3b7sbW3x487PzzJ6h",
"role": "manager",
"dateAdded": "2018-01-24T17:49:50.734Z"
},
{
"id": "n72PveQmdjcsvv5t5",
"role": "manager",
"dateAdded": "2018-01-24T17:49:53.545Z"
},
{
"id": "dSqzezqQjrzLeSTEw",
"role": "manager",
"dateAdded": "2018-01-24T17:50:11.177Z"
}
]
}`
我更新记录的方法:
removeUserFromProj: (projId, memberId) =>{
Projects.update({ _id: projId }, {
$pull: { "members": { id: memberId } }
// $pull: { "members.id": memberId }
},
function (error, success) {
if (error) {
console.log('error: ', error);
}
if (success) {
console.log('updating user role: ' + success);
}
});
}
回调函数给了我一个成功
但该集合未更新。
如果我使用这种语法// $pull: { "members.id": memberId }
,它会给我这个错误说:
simulating the effect of invoking 'removeUserFromProj' Error: After filtering out keys not in the schema, your modifier is now empty
我也尝试使用$ pop而不是$ pull。它正在删除我的收藏中的最后一条记录。
我正在使用meteor SimpleSchema。
答案 0 :(得分:0)
发现我的错误。看起来我的架构中的autoValue属性阻止我更新我的
OrganizationSchema = new SimpleSchema({
name: {
type: String,
label: "Organization Name"
},
createdAt: {
type: Date,
autoValue: function(){
return new Date()
}
},
createdBy:{
type: String
},
members: {
type: [Member],
optional: true
}
});
将autoValue属性更改为
createdAt: {
type: Date,
autoValue: function(){
return new Date()
}
}
defaultProperty解决了我的问题:
createdAt: {
type: Date,
defaultValue: new Date()
},