【问题标题】:MongoDB java - how to remove elements of arrays equal to some value?MongoDB java - 如何删除等于某个值的数组元素?
【发布时间】:2017-08-23 01:53:58
【问题描述】:

我是一个 mongoDB 菜鸟,我正在为查询而苦苦挣扎。假设我有以下结构:

{
    "id": "1",
    "type": 2,
    "shops": ["1000","2000","3000"]
  },
  {
    "id": "2",
    "type": 2,
    "shops": ["1000","4000","5000"]
  }

如何删除每个等于 1000 的商店,以便生成的数据库记录为:

{
    "id": "1",
    "type": 2,
    "shops": ["2000","3000"]
  },
  {
    "id": "2",
    "type": 2,
    "shops": ["4000","5000"]
  }

提前非常感谢!

【问题讨论】:

  • 更新的 json "shops": [ 0: 4000 1: 5000 ] 对我来说似乎不正确。列表中应该有一些对象来包含这些键和值。

标签: java mongodb


【解决方案1】:

您可以使用pull operator 执行类似的操作,如下所示:

db.shopCollection.update(
    { },
    { $pull: { "shops": { "idShop", 1000 } } },
    { multi: true }
)

假设 shopCollection 作为您的收藏集的名称。

编辑:要在java中使用相同的,您可以按照MongoDB Java pull中提到的答案进行操作。在java中,是这样的:

Bson query = new org.bson.Document();
Bson fields = new org.bson.Document().append("shops", new org.bson.Document().append("$idShop",1000));
Bson update = new org.bson.Document("$pull",fields);
yourCollection.updateMany(query, update);

Edit2:对于共享的更新 JSON 值,您可以将 java 代码更新为:

Bson filter = Filters.in("shops","1000");
Bson query = Filters.elemMatch("shops", filter);
Bson update = new org.bson.Document("$pull", filter); 

campaignsCollection.updateMany(query, update);` 

【讨论】:

  • 非常感谢您这么快回答。我通过调用getCollection("shops")来获取收藏,但是找不到"update"方法,只有updateOne和updateMany。
  • @Poider12 请使用您用于访问集合的 java 代码更新问题。另请注意,我共享的查询是针对 mongo shell 而不是 Java。您可以在java中updateMany更新文档列表。
  • @Poider12 是这样的。更新了答案,也请重新检查问题中更新的 Json。
  • @Poider12 在这种情况下,您能否使用正确的 json 更新问题。会从中推断出你的对象。
  • @Poider12 再次编辑了答案,这可能会对您有所帮助。您还可以分享您用于文档的 java 模型吗?
猜你喜欢
  • 1970-01-01
  • 2011-11-23
  • 2017-09-21
  • 1970-01-01
  • 2014-04-21
  • 2013-06-02
  • 2016-02-25
相关资源
最近更新 更多