存储MongoDB ObjectId数组的类型



我想保存一个 ObjectId 数组,我通过猫鼬通过 REST 接口获得它到 mongodb。我经常遇到这样的问题,即当我将 objectsId 从 REST 接口保存到数据库时,我会收到转换错误。服务器端代码是用打字稿编写的。

架构为:

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的答案

  3. 我看到了填充功能,这在这里有帮助吗?

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
             },
          ]
我会

说将对象 ID 存储在数据类型为 ObjectId 的数组中。因此,为此,您应该将'575e52790c0fc76a11e381d0'的字符串格式的id转换为类型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

最新更新