如何在mongodb集合中创建文档并同时更新另一个集合

时间:2012-10-17 07:18:33

标签: session mongodb mongoose

这是我的问题

我有三个架构

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({


})

有必要注册userschema以使用该应用程序,但除非用户想要出售某些内容,否则无需注册shopschema。但是,当用户注册shopchema时,我需要使用商店的_id更新userschema,

所以这就是我所做的

  1. 在商店集合中创建文档
  2. 找到商店_id
  3. 更新用户集合
  4. 你可以看到我三次查询数据库,所以我想知道这是否可以在一个查询中完成,以节省时间,如

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

    万一你想知道为什么我需要这个,因为我使用'passport'来登录用户,我想在req.user中通过商店的_id访问ProductShcema,否则每次我想访问ProductShcema我想找到商店的_id然后得到属于商店_id的产品。

    如果你有更好的解决方案,请告诉我。谢谢!!!

1 个答案:

答案 0 :(得分:0)

抱歉,我想我应该更仔细地阅读mongoose doc

这是我想出来的

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);
 })
})

它创建商店文档并更新用户集合,它适用于我。