Ruby on rails Mongoid使用数组字段进行查找,数组中没有任何顺序

Ruby on rails Mongoid使用数组字段进行查找,数组中没有任何顺序,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,我有以下记录: { "_id" : ObjectId("54bcc86320db902902000c13"), "latest_activity_at" : ISODate("2015-01-19T09:10:40.000Z"), "members" : [ "54ad458b20db9004e903ac02", "54ad1d9320db9004e90348b2" ], "kid_id" : ObjectId("54a

我有以下记录:

{
    "_id" : ObjectId("54bcc86320db902902000c13"),
    "latest_activity_at" : ISODate("2015-01-19T09:10:40.000Z"),
    "members" : [ 
        "54ad458b20db9004e903ac02", 
        "54ad1d9320db9004e90348b2"
    ],
    "kid_id" : ObjectId("54ad1d9320db9004e90348b2"),
    "updated_at" : ISODate("2015-01-19T09:10:40.000Z"),
    "created_at" : ISODate("2015-01-19T09:03:31.000Z"),
    "token" : "cvq1t-Ml7HLmzQo3mDMdiA"
}

{
    "_id" : ObjectId("54bcca7b20db902902000e28"),
    "latest_activity_at" : ISODate("2015-01-19T09:12:27.000Z"),
    "members" : [ 
        "54ad1d9320db9004e90348b2", 
        "54ad458b20db9004e903ac02"
    ],
    "kid_id" : ObjectId("54ad458b20db9004e903ac02"),
    "updated_at" : ISODate("2015-01-19T09:12:27.000Z"),
    "created_at" : ISODate("2015-01-19T09:12:27.000Z"),
    "token" : "H4Sv2yqXSpdGIsKlD7zsRg"
}
我试图用以下方法找到记录:

模型 看法
但我只得到一条记录,我想查找所有记录,无论数组字段中的顺序如何。

MongoDB将在数组字段中搜索您的记录,因此您想说:

其中
成员
当前的孩子id.to
成员
k.id.to

您尝试构建的基础查询是:

db.kid_conversations.find({
  $and: [
    { members: "54ad458b20db9004e903ac02" },
    { members: "54ad1d9320db9004e90348b2" }
  ]
})
您想在两个子句中使用
all_of

KidConversation.all_of(
  { members: member.to_s },
  { members: member2.to_s }
)
或者使用
where
自己构建
$和

KidConversation.where(:$and => [
  { :members => member.to_s  },
  { :members => member2.to_s }
])

您还可以使用:

$all
运算符选择字段值为包含所有指定元素的数组的文档

感谢您的提醒。在MongoDB中,您可以:

db.kid_conversations.find({
  members: {
    $all: [
      "54ad458b20db9004e903ac02",
      "54ad1d9320db9004e90348b2"
    ]
  }
})
在Mongoid中可以转换为以下内容之一:

KidConversation.where(:members.all => [ member, member2 ].map(&:to_s))
KidConversation.all(:members => [ member, member2 ].map(&:to_s))
这两个Mongoid查询在到达MongoDB时结果相同,因此请使用对您有意义的版本。

为什么不使用?考虑到这是参数中的同一字段。这比每次都给同一个字段命名要简洁得多。
db.kid_conversations.find({
  members: {
    $all: [
      "54ad458b20db9004e903ac02",
      "54ad1d9320db9004e90348b2"
    ]
  }
})
KidConversation.where(:members.all => [ member, member2 ].map(&:to_s))
KidConversation.all(:members => [ member, member2 ].map(&:to_s))