5

名前フィールドだけを持つプロジェクト モデルがあり、そこには line_items へのリレーションも埋め込まれています。クラス プロジェクト インクルード mongoid::document フィールド :name embeddeds_many :line_items end

  class LineItem
   include mongoid::document
   field :title
   embedded_in :project, :inverse_of => :line_items
  end

これはmongoドライバーの質問だと思います:もし私がそのような文書を持っていたら

db.project.find()[0]
      {
        _id : 123, 
        name : "housework", 
        line_items:[
         { title : "clean fridge", _id : 601},
         { title : "clean tub",    _id : 602},
         { title : "clean oven",   _id : 603}
        ]
      }
  • 1) mongo コンソールで ID 601 の項目を更新するにはどうすればよいですか?
  • 2) どうすれば削除できますか?

ありがとう!

4

4 に答える 4

15

現在の Mongoid (2.0.0) では、次のことが可能です。

@category = @list.categories.find(params[:id])
@category.delete

結果のデータベースクエリ/更新は次のようになります。

MONGODB test['lists'].update({"_id"=>BSON::ObjectId('4d9522315569b11918000019')}, {"$pull"=>{"categories"=>{"_id"=>BSON::ObjectId ('4d9523e05569b1191800001f')}}})

http://mongoid.org/docs/persistence/の最後の例も参照してください。

ActiveRecord (@list.categories.delete(xx)) で動作するバリエーションを試してみましたが、効果がないようです。

于 2011-04-01T01:24:38.533 に答える
1

1/ 更新 :

pro = Project.first
line_item = pro.line_items.find(601)
line_item.title = 'new title'
line_item.save

2/ 削除 :

pro = Project.first
line_item = pro.line_items.find(601)
pro.line_item_ids.delete(601)
pro.save
于 2010-09-12T13:18:36.453 に答える
0

試す:

db.project.update({}, {$set: {line_items: []}});

埋め込みドキュメントを削除するには、内部のデータを空にリセットするだけですが、後で再設定できる空のオブジェクトがデータベースに保持されます。

于 2012-11-25T22:04:14.650 に答える
0

試す ...

アップデート:

db.project.update( { line_items._id : 601 }, { $set : { line_items.title : "new title" } })

消去:

db.project.update( { $pull : { line_items._id : 601 } })

申し訳ありませんが、今すぐ試してみませんか?

于 2010-09-13T13:41:04.753 に答える