【问题标题】:How do you check if an embedded document exists in a document in mongoid?如何检查 mongoid 文档中是否存在嵌入式文档?
【发布时间】:2012-05-10 03:46:49
【问题描述】:

如何检查在 Ruby on Rails 中使用 mongoid 的文档是否存在嵌入文档?假设我有一个文档user,其中包含nameemail,并且可能有一个nicknames 嵌入文档。现在如果我运行user.first.nicknames 并且如果user 没有nicknames 嵌入文档,它会出错。我试过matches?exists? 但它们不起作用。

谢谢!

【问题讨论】:

    标签: ruby-on-rails mongoid


    【解决方案1】:

    在此处其他答案的帮助下,我找到了一些对我有用的东西,我认为这就是原始海报的想法;

    Model.where(:"subdoc.some_attribute".exists => true) 
    

    这将返回子文档中存在“some_attribute”的所有文档。 注意符号的语法,这就是我所缺少的。

    【讨论】:

    • 也可以通过关联:Model.subdocs.where(:field.exists => true).
    • 这是我一整天都在寻找的。它没有记录在任何地方!?
    【解决方案2】:

    如果不存在则返回 true User.first.nicknames.nil?,如果存在则返回 true:User.first.nicknames.present?

    【讨论】:

    • 这两个都不适用于没有 nicknames 的 mongoDB 文档。它会产生“NoMethodError:未定义的方法nicknames”错​​误。这确实适用于具有 nicknames.. 的文档
    • 这不是我的工作,我使用的是 MongoId 2.3.3。在我看来,User.first 实际上是零。所以你试图在一个 nil 对象上调用nicknames。你能验证一下吗?
    【解决方案3】:

    你可以User.where(:nicknames.exists => true).include?(user)

    User.where(:nicknames.exists => true) 将只返回包含nicknames 的文档。

    【讨论】:

      【解决方案4】:

      应该像{"user":{"$exists":"nicknames"}}一样简单

      【讨论】:

      • 这是一个 mongo shell 命令吗?我正在寻找 Ruby on Rails 中的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多