哪种类型存储MongoDB ObjectIds数组?

时间:2016-06-14 07:34:05

标签: node.js mongodb mongoose typescript mongoose-populate

我想保存一个ObjectIds数组,我通过一个REST接口通过mongoose到mongodb。当我将objectsIds从REST接口保存到数据库时,我经常遇到一个问题,我得到了一个强制转换错误。服务器端代码用typescript编写。

架构是:

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

从REST界面我得到&#34; lanch&#34;一个字符串数组: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必须如何正确呈现?这只是一种类似于&#39; 575e52790c0fc76a11e381d0&#39;还是需要像ObjectId这样的前缀(&#34; 575e52790c0fc76a11e381d0&#34;)?

  2. 最后,阵列会是什么样子?这取决于#1

  3. 的答案
  4. 我看到了填充函数,这可以帮到这个吗?

2 个答案:

答案 0 :(得分:1)

1)如果您使用的是mongoose,则无需添加前缀ObjectId。您可以保存为参考ID数组。

$array1 = array(
[0] => Array
    (
        [price] => 191
        [date1] => 22-07-2016
        [date2] => 30-07-2016
        [airline] => Lufthansa
    )
[1] => Array
    (
        [price] => 80
        [date1] => 25-07-2016
        [date2] => 30-07-2016
        [airline] => Easyjet
    )
[2] => Array
    (
        [price] => 243
        [date1] => 10-08-2016
        [date2] => 36-08-2016
        [airline] => Airberlin
    )
);

$array2 = array(
[0] => Array
    (
        [price] => 230
        [date1] => 22-07-2016
        [date2] => 30-07-2016
        [airline] => Lufthansa
    )

[1] => Array
    (
        [price] => 80
        [date1] => 25-07-2016
        [date2] => 30-07-2016
        [airline] => Easyjet
    )

[2] => Array
    (
        [price] => 200
        [date1] => 10-08-2016
        [date2] => 36-08-2016
        [airline] => Airberlin
    )
);

2)最后你的数组看起来像这样。

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

3)是的,填充功能在这里会有所帮助。它将填充整个数组。填充后,它将看起来像

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

答案 1 :(得分:0)

我想说将对象ID存储在数据类型为<script src="tripledes.js"></script> <script src="mode-ecb.js"></script> <button id="action-button">Click me to load info!</button> <div id="info"></div> 的数组中。为此,您应该将字符串格式ObjectId的id转换为'575e52790c0fc76a11e381d0'类型。

使用以下内容进行转换:

考虑id为ObjectId

a user (userId)