2016-06-14 53 views
0

我想保存一個ObjectIds數組,我通過一個REST接口通過mongoose獲取到一個mongodb。當我將objectsIds從REST接口保存到DB時,我經常遇到我出現轉換錯誤的問題。服務器端代碼是用打字機編寫的。存儲MongoDB ObjectIds數組的類型?

的模式是:

var WaSchema = new mongoose.Schema({ 
    ownerId: { type: 'String', required: true }, 
    options: { type: 'String', required: false }, 
    launch: [{ type : 'ObjectId', required: true }], 
}); 

從REST接口,我得到了 「lanch」 字符串數組:launch: Array<string>

這是我現在該怎麼辦保存:

WaModel.findOneAndUpdate(query, { 
      ownerId: userId, 
      options: wa.options, 
      launch: wa.launch 
     }, 
     { upsert: true }, 
     (err, doc) => { 
      if (err) throw err 
      else return 'successfully saved/updated'; 
     }) 
  1. REST界面中的ObjectId必須如何才能正確鑄造?它只是像'575e52790c0fc76a11e381d0'這樣的刺探還是它需要像ObjectId(「575e52790c0fc76a11e381d0」)這樣的前綴?

  2. 數組在最後看起來如何?這取決於#1的回答#1

  3. 我看到了填充函數,這可以幫助嗎?

回答

1

1)如果你使用的是貓鼬,那麼不需要添加前綴ObjectId。您可以保存爲參考ID數組。

var insertData = { 
      ownerId: userId, 
      options: wa.options, 
      launch: [ '56cea954d82cd11004ee67b5','56ceaa00d82cd11004ee67bc' ] 
      } 

2)最後你的數組看起來像這樣。

"launch" : [ 
     ObjectId("56cea954d82cd11004ee67b5"), 
     ObjectId("56ceaa00d82cd11004ee67bc")    
    ], 

3)是的,填充函數將在這裏有所幫助。它將填充整個數組。填充後,它會看起來像

"launch" : [ 
      { _id: '56cea954d82cd11004ee67b5', 
       .... other fields 
      }, 
      { _id: '56ceaa00d82cd11004ee67bc', 
       .... other fields 
      }, 
      ] 
0

我想說店數組對象ID與數據類型ObjectId。所以要做到這一點,您應該將字符串格式的編號爲'575e52790c0fc76a11e381d0'的編號轉換爲類型ObjectId

使用以下方法來轉換:

考慮ID是a user (userId)

var stringUserId = '575e52790c0fc76a11e381d0'; 
var ObjectId = mongoose.Types.ObjectId; 
var userId = ObjectId(stringUserId); //This should assign a value of datatype ObjectId to userId