【问题标题】:Check if property value exists检查属性值是否存在
【发布时间】:2014-08-07 11:11:10
【问题描述】:

我正在寻找一种方法来检查一个值是否已经存在。 我目前的方式是:

store.createQuery(MyClass.class).field(property).equal(value).countAll() > 0;

这是最有效的方法还是有更好的方法来做到这一点? 我不需要全部计数,第一场比赛就足够了。

【问题讨论】:

  • 我们能不能问“目的是什么?”通常,如果您说明“为什么”要这样做和“您真正想做什么”,那么与您当前提出的问题相反,还有另一个更简洁的答案。
  • 我的目的是检查用户名或电子邮件是否已经存在(例如通过注册)。我有一个唯一索引,但 DuplicateKeyException 没有关于该属性的信息,除非我会解析错误字符串。 (jira.mongodb.org/browse/JAVA-1352)

标签: java mongodb mongodb-query morphia


【解决方案1】:

您似乎真的在寻找 "createIfMissing" 或一般 MongoDB “upsert” 行为。这样做是 id 查询条件没有找到要更新的文档,然后创建一个新文档:

ops = store.createUpdateOperations(MyClass.class).set("name", "This Value");
store.updateFirst(MyClass.class).field(property).equal(value), ops, true)

还可以查看核心 MongoDB 文档中的 $set 运算符和 .update() 方法。

【讨论】:

  • 如果丢失我不想插入。我的工作流程是:来自客户端的请求检查是否存在重复用户名的返回错误我只需要一个简单的检查。但 countAll 似乎不是最有效的方法。
  • @Dominic "upsert" 表示如果“重复”不存在则插入。与一个相比,两个操作永远不会更有效。如果你的意思是别的,那么你的问题就不够清晰。
猜你喜欢
  • 1970-01-01
  • 2019-04-11
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 2011-02-01
相关资源
最近更新 更多