首页 文章

如何在mongodb中加入集合

提问于
浏览
0

我有一个集合,其中数据由所有者存储,所有者ID也与数据一起存储 . 另一方面,还有另一个集合,其中存储了所有者详细信息 .

{
    "_id" : ObjectId("58103aac9899ff238cbae413"),
    "id" : 10585131,
    "title" : "Edfwef EdfwefE dfwefE dfwefEd fwef",
    "category" : "Furniture",
    "condition" : "Brand New",
    "brand" : "Samsung",
    "price" : "3434",
    "description" : "sdvsdfv",
    "date" : ISODate("2016-10-26T05:10:04.240Z"),
    "ownerId" : "40903aac9899er238cbae598",
    "__v" : 0
}

现在我获取上面的数据并显示在HTML文件上 . 在获取数据的同一个html文件中,我想在ownerId的基础上显示所有者详细信息 . 我的意思是如何在mongodb中加入两个集合?请帮忙 .

谢谢 .

Updated:

admodel

`var adSchema=new Schema({ id:{type:Number}, title:{type:String, required:true}, category:{type:String}, condition:{type:String}, brand:{type:String}, price:{type:String}, city:{type:String}, town:{type:String}, description:{type:String}, image:{type:String}, date:{type:Date}, ownerId:{type:Schema.Types.ObjectId, ref: 'user'} }); module.exports=mongoose.model('ads', adSchema);`

user

`var UserSchema=new Schema({ name:{type:String, require:true}, password:{type:String, require:true, unique:true,}, email:{type:String, require:true, unique:true,}, mobile:{type:String} }); module.exports = mongoose.model('User', UserSchema);`

Inserting Data

`apiRoutes.post('/adcreate',upload ,function(req, res, next){
  var token=req.headers.authorization;
  var owner=jwt.decode(token, config.secret);
  var currentDate=Date.now();
  var adId=Math.floor(Math.random()*13030978)+1;
  var ad=new admodel({
          id:adId,
          title:  req.body.title,
          category:req.body.category,
          condition:req.body.condition,
          brand:req.body.brand,
          price:req.body.price,
          city:req.body.city,
          town:req.body.town,
          description:req.body.description,
          date:currentDate,
          ownerId:owner.id
      }) ;
    ad.save(function(err, data){
          if(err){
            return res.json({success:false, msg:'Ad not Posted'});
          }else{
            res.json({succes:true, msg:'Successfully ad Posted'});
          }
     });
});`

Fetching Data

`apiRoutes.get('/individualads/:id', function(req, res,next){ admodel.findOne({_id:req.params.id}).populate('ownerId').exe‌​c(function(err, data){ if(err){ res.json(err); } else{ console.log(data); res.json(data); } }); });`

2 回答

  • 2

    您可以尝试如下并根据您的db集合替换属性

    参考链接:https://docs.mongodb.com/v3.2/reference/operator/aggregation/lookup/

    // I assume 'orders' is your first collection name
        db.orders.aggregate([
            {
              $lookup:
                {
                  from: "owners",    // your second collection name
                  localField: "ownerId",  // matched property in first collection
                  foreignField: "_id",    // matched property to join to the second collection
                  as: "owner"       // owner details output property
                }
           }
        ])
    

    根据您的要求使用 mongoose

    admodel 上,使用目标(第二个)型号名称添加 ref ,如下所示

    ownerId: {
                type: Schema.Types.ObjectId,
                ref: 'owner'  // This should be a name of the second model name in which you want to join and fetch data
            }
    

    然后更改 route ,如下所示,

    apiRoutes.get('/individualads/:id', function(req, res,next){
       admodel.findOne({_id:req.params.id}).populate('ownerId').exec(function(err, data){ 
          if(err){
            res.json(err);
          } else{ 
            console.log(data); 
            res.json(data); 
          } 
       }); 
    });
    
  • 1

    可以这样做:

    db.owner.find({}).populate({'path':'ownerId','model':'owner'}).exec()
    

相关问题