嘿我试图允许用户更新数组中的电子邮件。如果他们点击编辑,我想更新他们的特定电子邮件。我有旧的价值和新的价值,我知道我可以做一个拉动和推动,但想看看我能否以更有效的方式做到这一点,将价值与$ elemMatch匹配,然后用新值设定它?我尝试了位置运算符,但它不适用于没有键关系的数组中的值,意味着fieldx:value x ...这是我的尝试,不确定如何去做?欢迎其他方向。
User.findByIdAndUpdate(req.signedCookies.userid,{
emailList: { $elemMatch: {oldEmail, {$set: {req.body.updateEmail}}}}
}, function(err, userX) {});
答案 0 :(得分:0)
MongoDB语法是
> db.test.insert({userId: '1234', emailList: ['abc', 'def']})
> db.test.find()
{ "_id" : ObjectId("520eaade49177daf439a2ffa"), userId: '1234', "emailList" : [ "abc", "def" ] }
> db.test.update({userId: '1234', emailList: 'abc'}, {$set: {'emailList.$': 'ghi'}})
> db.test.find()
{ "_id" : ObjectId("520eaade49177daf439a2ffa"), userId: '1234', "emailList" : [ "ghi", "def" ] }
>
然后是Mongoose代码
User.findOneAndUpdate({userId: '1234', emailList: 'abc'}, {$set: {'emailList.$': 'ghi'}})
这将允许您在一个查询中进行更改,而不是$ pull和$ push
由于您正在搜索值数组而不是文档数组,因此您不需要$ elemMatch。您可以直接查询数组,MongoDB知道查看它并匹配一个值。