2016-06-14 56 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