当前位置: 首页 > 知识库问答 >
问题:

使用Spring Data MongoDB查找和更新compoundid字段的文档

龙新荣
2023-03-14

我已经实现了Serializable、实现了hashCode和equals。

public class SalesKey implements Serializable {

    Date timestamp;
    String hostName;

    public Date getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Date timestamp) {
        this.timestamp=timestamp;
    }

    public void setHostName(String hostName) {
        this.hostName=hostName;
    }

    public String getHostName() {
        return hostName;
    }

    @Override
    public int hashCode() {
    ..
    }

    @Override
    public boolean equals(Object obj) {
    ...
    }

}

我在MongoDB文档类中使用自定义键类,如下所示。

@Document(collection = "Sales")
public class Sales {

    @Id
    SalesKey salesKey;

    //Other fields
}

我可以使用spring data mongodb将文档保存到mongodb中。

Sales sales=new Sales();

SalesKey salesKey=getSalesKey();

sales.setSalesKey(salesKey)

//set other fields for sales object

//Save sales Document object to mongodb
@Query(value = "{ '_id' : ?0 }")
public Sales filterBySalesKey(SalesKey salesKey);

我首先使用的标准如下。

Criteria salesKeyCriteria = Criteria.where("_id").is(salesKey);

根据上述标准,我然后执行一个update状态,

但是,我的更新失败,出现错误,

共有1个答案

沃宇
2023-03-14

由于saleskey是您的Mongo_id,您可以使用MongoTemplate执行以下操作:

@Autowired
private MongoTemplate mongoTemplate;
...
Query query = new Query(Criteria.where("_id").is(salesKey));
mongoTemplate.updateFirst(query,Update.update("field", "new-value"),Sales.class);

跟进您对mongo explain的评论

如果我看看mongo Shell中的更新说明:

$ db.sales.explain().update({"_id" : { "timestamp" : ISODate("2016-08-25T12:12:59.251Z"), "hostName" : "myhostname" }},{value:"new-value"})
"winningPlan" : {
            "stage" : "UPDATE",
            "inputStage" : {
                "stage" : "IDHACK"
            }
        },
{ "_id" : { "timestamp" : ISODate("2016-08-25T12:12:59.251Z"), "hostName" : "value" }, "value" : "new" }
 类似资料:
  • 问题内容: 我目前正在编写一个小应用程序,以跟踪货币的来龙去脉,这只是为了提高我的C#常规技能。目前,对于我的登录屏幕,我具有以下代码 登录成功后,我要执行的操作是将当前PC的MachineName写入我的SQL数据库中“用户”表中的字段。这样,当我开始创建记录时,我可以快速找到我的UsersId(这是我的Transactions表中的外键)。 我知道您可以使用System.Enviroments

  • 问题内容: 我的文件 夹Folder 具有以下架构: 因此,对于每个页面,我可以拥有许多权限。在CMS中,有一个面板,其中列出了所有文件夹及其权限。管理员可以编辑一个权限并保存。 我可以很容易地用其权限数组保存整个 Folder 文档,其中只修改了一个权限。但是我不想保存所有文档(实际架构中包含更多字段),所以我这样做了: 但是问题是 烫发 总是 不确定的 !我试图以这种方式“静态地”获取许可:

  • 我找不到这个线程的合适标题(帮帮我)。我不能描述这个问题,所以这里是我的问题的例子。 我的数组: 我想得到这样的输出: 您可以在索引键0中看到分数子键的更改。这是因为索引键0和3的应答子键中有两个值“a”。由于两者的总和(34),分数改为7分。我真的不知道该怎么做,对不起我的英语,谢谢你的帮助。请随意评论。:)

  • 我正在使用Spring Data MongoDB和Spring Data Rest创建一个Rest API,它允许对我的MongoDB数据库进行GET、POST、PUT和DELETE操作,除了更新操作(PUT)之外,其他操作都很好。只有当我在请求体中发送完整对象时,它才起作用。 我试着在这里搜索一个解决方案,但我只找到了以下帖子,但没有解决方案:如何使用MongoRepository接口更新mon

  • 当前正在处理一个文本字段,如果您输入您的号码,它会像这样更新: 1##-###-#### 12#-###-#### 不幸的是,通过控制台将输入“1234”转换为“123-4###########”是可行的,但当我按下更新的字符串“123-4###-#####”时,它会自动将光标部分替换到开始位置,并不断替换第一位数字。当更新文本框中的字符串时,是否有人可以帮助保存光标位置?这是我的更新代码。

  • 问题内容: 我的“ Street_Address_1”列中包含以下数据: 大街123号 使用Postgresql,如何编写查询以更新“地址”表中的“ Street_Name”列?换句话说,“ Street_Name”为空白,我想用“ Street_Address_1”列中包含的街道名称值填充它。 据我所知,我想使用“ regexp_matches”字符串方法。不幸的是,我没有很多运气。 注意:您可