2016-12-08 8 views
0

私はユーザーと投稿の2つのコレクションを持っており、ページにフィードを投稿したユーザーのようなユーザー名を取得しようとしています。 curretnly私はこのような何かを得ている IMAGEng-repeatを使用して2つの異なるコレクションからデータを取得する方法

とtwitterのようなものを実装したい。ユーザーデータと投稿が2つの異なるコレクションにあるためです。私は投稿に「_id」しか得られません。以下は、ファイル

モデル/ story.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var StorySchema = new Schema({ 

creator: {type:Schema.Types.ObjectId, ref: 'User'}, 
content: String, 
create: { type:Date, default: Date.now } 
}); 

module.exports = mongoose.model('Story', StorySchema); 

モデル/ user.jsの

var mongoose = require('mongoose'); 
var bcrypt = require('bcrypt-nodejs'); 

var Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
    name:String, 
    username: { type:String, required: true, index: { unique: true}}, 
    password: { type: String, reuired: true, select: false } 
}); 

UserSchema.pre('save', function(next){ 
    var user = this; 

    if(!user.isModified('password')) return next(); 

    bcrypt.hash(user.password, null, null, function(err, hash){ 
     if(err) return next(err); 

     user.password = hash; 
     next(); 
    }); 

}); 

UserSchema.methods.comparePassword = function(password){ 
    var user = this; 
    return bcrypt.compareSync(password, user.password); 
} 

module.exports = mongoose.model('User', UserSchema); 

コントローラ/ Storyctrl.js

angular.module('storyCtrl', ['storyService']) 

.controller('StoryController', function(Story, socketio){ 

    vm = this; 

    vm.stories=[]; 



    vm.getStories = function(){ 
     Story.all() 

     .success(function(data){ 
      vm.stories = data; 
     }); 
    }; 

    vm.createStory = function(){ 

     vm.message = ''; 

     Story.create(vm.storyData) 
      .success(function(data){ 
       vm.storyData.content = ''; 
       vm.message = data.message; 

       // vm.getStories(); // Refresh 

       // vm.stories.push(vm.storyData); 
      }); 

    }; 

    vm.getStories(); 

    socketio.on('story', function(data){ 
     vm.stories.push(data); 
    }); 
}) 

.controller('allStoriesController', function(stories, socketio){ 

    var vm = this; 

    vm.stories = stories.data; 


    socketio.on('story', function(data){ 
     vm.stories.push(data); 
    }); 

}) 

HTMLファイル

です
<div> 
    <div class="col-md-4"> 
    </div> 

    <div class="col-md-4"> 
     <div class="row"> 

      <div class="panel panel-default"> 
       <div class="panel-heading"> 
        <h4>Stories</h4> 
       </div> 

       <div class="panel-body"> 
        <ul class="list-group" > 




         <li class="list-group-item" ng-repeat="s in story.stories | reverse"> 

          {{ s.content | date:"h:mma 'on' MMM d, y" }} 


          <small>Posted by @ {{s.creator}}</small> 
          <small class="pull-right">{{s.create | date:"h:mma 'on' MMM d, y"}}</small> 



         </li> 
        </ul> 
       </div> 
      </div> 

     </div> 
    </div> 

    <div class="col-md-4"> 
    </div> 

</div> 

私はnodejsとmongodbを初めて使用しています。軽微な間違いや、まだ説明していないことがあれば、私はコメントを控えてください。

答えて

3

nodejsには、個の参照先のオブジェクトを使用する必要があります。 これはmongodbのネイティブ機能ではないORM機能なので、mongoose ORMを使用しているときは、参照IDをオブジェクトに設定する必要があり、読み込まれたオブジェクトは照会完了後にオブジェクトとしてjson変数をオブジェクトに置き換えます。このリンクに行くの詳細について :

http://mongoosejs.com/docs/populate.html

ここにあなたがnodejsルートファイルに

TestPopulation.js

var mongoose = require('mongoose'); 
require('./connection'); 

// require mongoose models 
var Story = mongoose.model('Story'); 
var Person = mongoose.model('Person'); 
    Person.find().populate({ 
    path: 'stories', 
    // Get friends of friends - populate the 'friends' array for every friend 
    populate: { path: '_creator' } 
    }).exec(function(err,data){ 
    console.log(data); 
}); 

接続を記述する必要がコードがあります.js

var mongoose = require("mongoose"); 
    var Schema = mongoose.Schema; 

    var personSchema = new Schema({ 
     _id  : Number, 
     name : String, 
     age  : Number, 
     stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }] 
    }); 

    var storySchema = new Schema({ 
     _creator : { type: Number, ref: 'Person' }, 
     title : String, 
     fans  : [{ type: Number, ref: 'Person' }] 
    }); 

    mongoose.model('Story', storySchema); 
    mongoose.model('Person', personSchema); 

//mongoose runs only on 27017 port 
mongoose.connect('mongodb://127.0.0.1:27017/spicex'); 

出力

[{ 
    "_id": 0, 
    "name": "Aaron", 
    "age": 100, 
    "__v": 0, 
    "stories": [{ 
     "_id": "584d083038c162c81a69a013", 
     "title": "Once upon a timex.", 
     "_creator": { 
      "_id": 0, 
      "name": "Aaron", 
      "age": 100, 
      "__v": 0, 
      "stories": ["584d083038c162c81a69a013"] 
     }, 
     "__v": 0, 
     "fans": [] 
     }] 
    }, { 
    "_id": 1, 
    "name": "sanjeev", 
    "age": 100, 
    "__v": 0, 
    "stories": [] 
    }] 
関連する問題