当前位置: 首页 > 面试题库 >

使用MongoDB-Java驱动程序从阵列中删除条目

严宸
2023-03-14
问题内容

我有像这样的JSON:

{ 
    "_id" : "1",
    "_class" : "com.model.Test",
    "itemList" : [
        {
            "itemID" : "1",
            "itemName" : "Foo",
            "resources" : [ 
                { 
                    "resourceID" : "1",
                    "resourceName" : "Foo Test1"
                 }, {
                    "resourceID" : "2",
                    "resourceName" : "Foo Test2"
                 }
             ]
        }
    ]
}

我需要能够删除itemList的记录之一。我已经完成以下工作:

public void removeItemByID(String docID, String itemID) throws Exception {
    MongoOperations mongoOperations = mongoConfiguration.getMongoTemplate();
    Query query = new   Query(where("_id").is(docID).and("itemList.itemID").is(itemID));
    mongoOperations.remove(query, Item.class);

}

这种方法行不通。但是,当我将BasicDBObject与$ pull方法一起使用时,它可以正常工作!这些方法之间有什么区别!


问题答案:

如果通常要删除数组,请使用以下命令:

BasicDBObject match = new BasicDBObject("_id", "1"); // to match your document
BasicDBObject update = new BasicDBObject("itemList", new BasicDBObject("itemID", "1"));
coll.update(match, new BasicDBObject("$pull", update));


 类似资料:
  • 问题内容: 我们当前的连接配置如下所示: 并且已在当前版本(源代码)中弃用,并将被删除:“此方法无法替代。使用connectTimeout属性控制连接超时。” 我认为重试和连接超时是两回事。有谁知道为什么改变了它以及它有什么(内部)含义? 问题答案: 关于autoConnectRetry的含义有很多困惑。大多数人认为这意味着,如果操作由于IOException而失败,驱动程序将重试该操作,直到ma

  • 我的数据如下所示: 其中,foo\u list是一个名为Bar的模型中的字段。请注意,阵列中的第一个和第二个对象是完全重复的。 除了切换到PostgresSQL这一显而易见的解决方案之外,我还可以运行什么MongoDB查询来删除foo\u列表中的重复条目? 类似的答案并不能完全解决这个问题: https://stackoverflow.com/a/16907596/432 https://stac

  • 服务器上的mongodb版本将比驱动程序版本旧。我的java驱动程序版本是3.6,Mongo-版本显示我是2.4 我该怎么解决这个问题?

  • 驱动程序版本为: 我的问题是,当我使用api find和一些来自java的过滤器时,操作需要15秒。 我检查了mongo服务器日志文件,发现跟踪是一个命令,而不是一个查询: 2015-09-01T12:11:47.496+0200I命令[conn503]命令b.$CMD命令:计数{count:“logs”,查询:{timestamp:{$GTE:新日期(1433109600000)},aplica

  • 通过使用MongoDB和Java驱动程序,我有一个用户集合,我想根据他们的ObjectId进行查询(总体情况:我从ObjectId推断出对象的创建时间戳)。 问题是,用ObjectId查询似乎不起作用:我总是没有结果。为了测试的目的,我在搜索查询中硬编码了数据库中现有用户的ObjectId,只是为了确保我能得到结果: {“_id”:ObjectId(“565ef85ee4b0a4db3c2fc96

  • 如何在mongo db中创建一个可以公开集合中所有文档的视图?我使用了以下代码: 我正在尝试用管道空列表,但它不工作。你能帮忙吗?