10

アイテムが埋め込まれたモデル エントリがあります。

class Entry
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Spacial::Document
  embeds_many :items, cascade_callbacks: true
...

class Item
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Spacial::Document
  embedded_in :entry
...

項目 ID でエントリを直接 mongo にクエリすると、次のようになります。

{"items._id" : ObjectId("50536b18baa072000f000360")}

エントリを返します:

505363b36181ce00020006b1 {"created_at":"2012-09-14T17:04:51Z","アイテム":[{"_id":"50536b1a2b17b3...

それでも、Mongoid 経由でクエリを実行すると:

irb(main):002:0> Entry.where('items._id' => '50536b18baa072000f000360')[0]
=> nil

他のすべてのクエリは機能します (アイテムの他のフィールドおよびエントリのフィールド)。しかし、idのためではありません。

Mongoid (2.4.12) を実行しています。

4

4 に答える 4

19

どうやら ID を BSON::ObjectId() でラップする必要があるため、次のようになります。

Entry.where('items._id' => BSON::ObjectId('50536b18baa072000f000360'))[0]

そうしないと、mongo は散発的に結果を返しません。

于 2012-09-18T14:52:20.540 に答える
5

これは Mongoid 4.0.0.beta1 で動作します:

Entry.where('items._id' => BSON::ObjectId.from_string('50536b18baa072000f000360'))

ここにドキュメントへのリンクがあります。

http://api.mongodb.org/ruby/current/BSON/ObjectId.html#from_string-class_method

于 2014-04-10T22:55:15.987 に答える
-3

代わりに、これも機能します。

Entry.find('50536b18baa072000f000360')
于 2014-05-20T22:14:17.557 に答える