更新数组中的嵌入式文档,而不使用Java在MongoDb中重复

时间:2017-02-02 07:25:33

标签: java mongodb

我的文档中有以下结构:

{
  "_id": 11111,
  "user": "user@mail.com",
  "sites": [
    {
      "sitename": "site1",
      "url": "site2.com",
      "keywords": [],
    },
    {
      "sitename": "site2",
      "url": "site2.com",
      "keywords": [],
    },
    {
      "sitename": "site2",
      "url": "site2.com",
      "keywords": [],
    },
  ]
},{
  "_id": 2222,
  "user": "user2@mail.com",
  "sites": []
}

我将按ID(id:11111)找到该文档。这里有多个文件。然后我想在包含1111 _id的文档中添加新站点到sites数组。如果sitename已经有,该网站不应该添加。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

类似

db.collection.update({_id:11111, 'sites.sitename' : {$exists:false}},
 {$set : {'sites.$.sitename':'newsite.com'}},{multi:true})

修改

如果您想为网站名称添加子文档

var sub = {'a':'a','b':'b'};

db.collection.update({_id:11111, 'sites.sitename' : {$exists:false}},
     {$set : {'sites.$.sitename':sub}},{multi:true})

答案 1 :(得分:1)

更新答案:

您可以检查class DetailViewController: UIViewController { @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() ... let tap = UITapGestureRecognizer(target: self, action: #selector(DetailViewController.tapFunction)) label.isUserInteractionEnabled = true label.addGestureRecognizer(tap) } func tapFunction(sender:UITapGestureRecognizer) { print("tap working") } } 是否为' 11111',然后检查_id是否存在并且不等于新的网站名称。然后你可以sitename将嵌入的文档放入数组中。

$push