如果其中一个字段存在于 mongoid 的另一个模型中,则获取对象数组

Posted

技术标签:

【中文标题】如果其中一个字段存在于 mongoid 的另一个模型中,则获取对象数组【英文标题】:Get an array of objects if one of the field exists in another model in mongoid 【发布时间】:2014-04-15 22:34:41 【问题描述】:

我正在尝试这样做:

我有一个用户模型,一个消息模型

对于某个用户,他/她可能有很多消息(存储在一个数组中)。

现在我想获取用户收到的所有消息,但需要检查发送消息的用户是否仍在数据库中。

流程是:

用户有一个收件箱,它是一个数组,里面存放着其他人发给用户的所有消息。

消息包含一个from_user,它是发送用户的id(字符串)。如果用户被删除,消息将保留在系统中。

所以我想做这样的查询:

Message.find(thisUser.inbox).where(用户的id存在于模型中)

即从消息模型获取记录时检查用户的id是否存在

我该怎么做?

谢谢!

【问题讨论】:

【参考方案1】:

您描述的功能类似于联接。在 MongoDB 中,该行为有两种选择,

将一个模型嵌入到另一个模型中 将查询拆分为两个单独的查询

我认为第一个选项在这里断章取义。

所以我建议的解决方案是

user = User.find(user_id)
messages = Message.where(user_id: user.id)

【讨论】:

以上是关于如果其中一个字段存在于 mongoid 的另一个模型中,则获取对象数组的主要内容,如果未能解决你的问题,请参考以下文章

Mongoid 范围检查数组字段是不是包含值

如果所有记录都存在于 sql server 的另一个表中,则返回行列表

如果元素存在于数据框的另一列中,则删除列表元素

查询 Mongoid 哈希字段

Mongoid 时间戳索引

如何在 Mongoid & Rails 中使用数组字段?