2016-07-11 4 views
0

Array以外の_idタイプを使用することができます。 (しかし、見つけることができません。あなたはこれを確認してもらえますか?)Mongod:customer _id(monk/node.js)のエントリを挿入する

性能上の理由から、ユーザ名(文字列)を_idにします。 Node.jsので

const monk = require('monk'); 
const db = monk('localhost:27017/test', 
    function(err) { 
     if(err) 
      console.log(err.toString()); 
    }); 
//const doc = {user: 'aa', password: 'password'}; 
//const doc = {_id: 'aa', password: 'password'}; 
const doc = {_id: monk.id('aa'), password: 'password'}; 
var users = db.get('users'); 
users.insert([doc]); 

最初のコメント行は動作しますが、他の行の両方のエラーアウト:

  • _id: monk.id('aa')エラー出てすぐ
  • _id: 'aa'エラーアウトusers.insert()を行うため、私はそれが文字列をIDにキャストしようとしていると思う。

エラーに関係なく同じです。

Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters 

はどのよう_idのために与えられた文字列を使用できますか?

ps:このコードを実行するには、mongo running、mongod --dbpath data、nodejs:npm install monk; nodejsが必要です。

答えて

5

monk.id(ARG)は、ARGObjectIddocumentation)にキャストしますが、これはあなたが望むものではありません。

代わりに、単に直接文字列を渡す:

const doc = { _id: 'aa', password: 'password' }; 

をモンクも自動的にObjectIdにidをキャストしているので、あなたがautocastingを無効にする必要があります。

const db = monk('localhost:27017/test', ...); 
db.options = { 
    safe : true, 
    castIds : false 
}; 
+0

問題は、私は同じエラーを取得するということです挿入を行うときに。更新された投稿を参照してください。 –

+0

@RicardoCruzオートキャスティングを無効にすることについての私の編集を参照してください。 – robertklep

+0

ありがとう、私はあなたの答えを選択しました。あなたは '_id'として自分のユーザ名を保存することに利点があると思いますか?私はこれをやっています。なぜなら、私が見つけるのが早いと思ったからです。しかし、私はサーバーKISSを維持したい。 'username: 'aa''を使って' _id'を選択させるべきだと思いますか? –

関連する問題