$pop"操作符:从数组顶部或尾部删除元素,可用于模拟队列或者栈
?
?
var where=
{
? ? "_id":ObjectId("5634b21827480baffb199df4")
};
var action=
{
? ? "$pop":{"family.sons":-1}//1:从数组头部删除一个元素,-1从数组尾部删除一个元素
};
db.user.update(where,action);
?
"$pull"操作符:删除数组中的所有匹配元素
?
?
var where=
{
? ? "_id":ObjectId("5634b21827480baffb199df4")
};
var action=
{
? ? "$pull":{"family.sons":"邓涵一"}//删除指定数组中的所有的指定元素
};
db.user.update(where,action);
db.runCommand("getLastError");
?
通过数组元素位置修改元素:
?
?
var where=
{
? ? "_id":ObjectId("5634b21827480baffb199df4")
};
var action=
{
? ? "$inc":{"age":-5},//年龄自减5
? ? "$set":{"family.sons.0":"邓紫棋"},//直接通过下标的形式修改sons数组中的第一个元素的值为:邓紫棋
};
db.user.update(where,action);
?
使用$定位:
?
?
?
var where=
{
? ? "family.sons.name":"邓紫棋"
};
var action=
{
? ? //$符号自动定位匹配到的数组元素,例如第一个匹配到的数组元素下标为3,那么$实际上可以认为就是3
? ? "$set":{"family.sons.$.name":"邓小山"},
};
db.user.update(where,action);
?
?
findAndModify函数:更新并返回某个文档
?
db.user.findAndModify({
? ? query: {name: 'a2'}, //查询条件
? ? sort: {age: -1}, //排序方式
? ? update: {$set: {name: '张杰'}, $inc: {age: 2}},//更新,或使用remove:true执行删除
? ? new:true//返回更新后的文档
});