0

ここに私の問題があります

私は3つのスキーマを持っています

var UserSchema = new Schema({
        username:String,
        email:String,
        hashed_password:String,
        salt:String,
        shop_id:{type:Schema.Types.ObjectId,ref:'Shop'},
})

var ShopSchema = new Schema({
       owner_id:{type:Schema.Types.ObjectId,ref:'User'},        
       owner_real_id:String,                                    
       owner_real_name:String,                                  
       owner_real_location:String,                              

       shop_name:String,
       sell_product_ids:[Schema.Types.ObjectId],

})

var ProductSchema = new Schema({


})

アプリを使用するには usersschema にサインアップする必要がありますが、ユーザーが何かを販売したい場合を除き、shopschema にサインアップする必要はありません。ただし、ユーザーがショップスキーマにサインアップするときは、ユーザースキーマをショップの _id で更新する必要があります。

だからここに私がやったことです

  1. ショップ コレクションでドキュメントを作成する
  2. ショップ_idを見つける
  3. ユーザー コレクションを更新する

ご覧のとおり、データベースに3回クエリを実行しているので、次のように時間を節約するために1回のクエリでこれを実行できるかどうか疑問に思っていました

Shop.create(regist_data,function(){
    //update the user collection here
})

なぜこれが必要なのか疑問に思っている場合は、'passport' を使用してユーザーにログインし、req.user のショップの _id で ProductShcema にアクセスしたいからです。ショップの _id を見つけて、ショップの _id に属する商品を取得します。

いずれにせよ、より良い解決策があれば、教えてください.thanx !!!

4

1 に答える 1

0

すみません、マングースのドキュメントをもっと注意深く読むべきだったと思います

ここに私が理解するものがあります

Shop.create(regist_data,function(err,shop){
    console.log('shop = '+shop);
    User.findByIdAndUpdate(req.user.id,{ $set: { shop_id: shop._id }},{new:true},function(err,data){
  if(err){
    console.log(err)
  }
  console.log('new user = '+data);
 })
})

ショップドキュメントを作成し、ユーザーコレクションを更新します。私にとってはうまくいきます。

于 2012-10-17T08:32:49.350 に答える