3
回答
mongodb关于update一个内嵌数组无法达到upsert的效果
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

现在有这么一个文档, 我希望执行一个update操作,根据studentId 和 noteCounts.noteBookId进行匹配,来更新noteCounts数组, 目的是如果已经存在那么更新, 否则在noteCounts数组中新增一条, 请各位大神赐教

{

"_id" : ObjectId("53d792ab5cc5cf0c5ee9c346"),
"noteCounts" : [
{
"noteBookId" : NumberLong(2),
"noteCount" : 175,
"subjectId" : NumberLong(1),
"subjectName" : "111"
}
],
"studentId" : NumberLong(1)
}



我现在的更新语句是 update({'studentId':1, 'noteCounts.noteBookId':2}, {'$push', {'noteBookId':2, 'noteCount' :100 ........}})
但是似乎update的 upsert$push不起作用, 匹配不到是正常新增没问题,但是匹配到了 没有执行更新 而是也新增了一条, 求大神赐教

举报
b_a_s_i_l00
发帖于3年前 3回/1K+阅
 update({'studentId':1, 'noteCounts.noteBookId':2}, {'$set',{noteCounts.$: {'noteBookId':2, 'noteCount' :100 ........}}})试试
Name Description
$ Acts as a placeholder to update the first element that matches the query condition in an update.
$addToSet Adds elements to an array only if they do not already exist in the set.
$pop Removes the first or last item of an array.
$pullAll Removes all matching values from an array.
$pull Removes all array elements that match a specified query.
$pushAll Deprecated. Adds several items to an array.
$push Adds an item to an array.

MongoDB Plugin可能java上最好用而且实时跟进官方版本的ORM,让您更加舒适地使用MongoDB。

  • 与MongoDB版本基本同步(基于最新3.4.0)
  • 使用方式更像是自然语言,用起来更舒适
  • 几乎没有任何学习成本
  • 支持MongoDB的授权机制(可以使用用户名和密码登录)、支持连接MongoDB副本集、读写分离、安全写入、SSL连接、地理位置等特性
  • 内置JFinal和Resty插件。(基于最新版的JFinal和Resty)

强烈推荐 https://www.oschina.net/p/mongodb-plugin  


使用plugin更新的话可参考https://t-baby.gitbooks.io/mongodb-plugin/content/geng_xin.html

顶部