2016-07-18 3 views
6

私はObjectIdの文字列を持っています。Mongoose String to ObjectID

var comments = new Schema({ 
    user_id: { type: Schema.Types.ObjectId, ref: 'users',required: [true,'No user id found']}, 
    post: { type: Schema.Types.ObjectId, ref: 'posts',required: [true,'No post id found']}.... 

export let commentsModel: mongoose.Model<any> = mongoose.model("comments", comments); 

どのように私は、ユーザーにそれを:

let comment = new commentsModel; 
str = 'Here my ObjectId code' // 
comment.user_id = str; 
comment.post = str; 
comment.save(); 

私は、「コメント」のモデルを作成し、保存するときに、私はエラーが発生している文字列user_idの値またはポストを割り当てます。私はconsole.log(comment)すべてのデータがvarsに割り当てられるようにします。

私が試してみてください。

var str = '578df3efb618f5141202a196'; 
    mongoose.mongo.BSONPure.ObjectID.fromHexString(str);//1 
    mongoose.mongo.Schema.ObjectId(str);//2 
    mongoose.Types.ObjectId(str);//3 
  1. はTypeError:オブジェクト関数のObjectID(ID){
  2. はTypeError:メソッドを呼び出すことはできません 'のObjectId'
  3. 未定義例外TypeErrorの:プロパティを読み取ることができません 'のObjectId' は定義されていない

もちろん私はマングースを含めましたすべての呼び出しの前に

import * as mongoose from 'mongoose'; 

何もしません。

+0

可能重複http://stackoverflow.com/questions/6578178/node-js-mongoose-js -string-to-objectid-function) – DAXaholic

+0

その質問からのメソッドは役に立ちません( – Melixion

+0

)最初から質問に含まれるべきいくつかのコード/エラーメッセージの表示を開始してください。何が失敗したのか(コード)と失敗の原因(エラー)を表示していないときは、私たちはあなたを助けることができません – DAXaholic

答えて

7

あなたはデフォルトのエクスポート使用したい:その後

import mongoose from 'mongoose'; 

を、mongoose.Types.ObjectIdは動作します:

import mongoose from 'mongoose'; 
console.log(mongoose.Types.ObjectId('578df3efb618f5141202a196')); 

EDIT:完全な例([email protected]でテスト):

import mongoose from 'mongoose'; 

mongoose.connect('mongodb://localhost/test'); 

const Schema = mongoose.Schema; 

var comments = new Schema({ 
    user_id: { type: Schema.Types.ObjectId, ref: 'users',required: [true,'No user id found']}, 
    post: { type: Schema.Types.ObjectId, ref: 'posts',required: [true,'No post id found']} 
}); 

const commentsModel = mongoose.model("comments", comments); 

let comment = new commentsModel; 
let str = '578df3efb618f5141202a196'; 
comment.user_id = str; 
comment.post = str; 
comment.save().then(() => console.log('saved')) 
       .catch(e => console.log('Error', e)); 

データベースに表示される内容:

mb:test$ db.comments.find().pretty() 
{ 
    "_id" : ObjectId("578e5cbd5b080fbfb7bed3d0"), 
    "post" : ObjectId("578df3efb618f5141202a196"), 
    "user_id" : ObjectId("578df3efb618f5141202a196"), 
    "__v" : 0 
} 
+0

それは私のために働く。あなたはどちらの蒸散器を使用していますか? – robertklep

+0

「コメント」モデルを作成して値を設定するとエラーが発生します。 'comments.user_id = mongoose.Types.ObjectId( '578df3efb618f5141202a196');' 'メッセージ 'のObjectIdにキャスト値に失敗しました "" パスで "USER_ID"'、 名: 'CastError' タイプ:' ObjectId '、 値:' '、 パス:' user_id '' マングースが空フィールドを参照...((( – Melixion

+0

これは別の問題ですが( 'comments'はサンプルコードのスキーマですが、スキーマからモデルを作成する方法、ドキュメントを作成する方法、 'あなたの質問を編集することで' user_id'をどのように割り当てるのかを示すことができますか? – robertklep

3

使用[のObjectId関数へのNode.js Mongoose.js列(この

var mongoose = require('mongoose'); 
var str = '578df3efb618f5141202a196'; 
var monmgoObjectId = mongoose.Types.ObjectId(str);