Mongoose只保存objectId而不是整个对象

时间:2017-12-01 22:33:55

标签: node.js mongodb mongoose

我正在尝试保存对象数组,但它只是保存了ObjectIds而不是整个对象,甚至在架构中认为没有参考或类似的东西。

所以,我有这个架构:

let MatchPlayerSchema = new Schema({
    deck: {type: Array, default: []}
});

我正在尝试从数据库中保存这个数组( playerDeck ):

    [ { _id: 5a1fc7ee667b103aace5f3ec,
    magicResist: 10,
    armor: 10,
    attack: 10,
    health: 10,
    name: 'Test',
    __v: 0,
    type: 'CardUnit' },
  { _id: 5a1fc7ee667b103aace5f3ec,
    magicResist: 10,
    armor: 10,
    attack: 10,
    health: 10,
    name: 'Test',
    __v: 0,
    type: 'CardUnit' }]

像这样:

let player = new MatchPlayer();
player.deck = playerDeck;
player.save();

然而,结果是:

"deck" : [ 
     ObjectId("5a1fc7ee667b103aace5f3ec"), 
     ObjectId("5a1fc7ee667b103aace5f3ec")
]

我试图将套牌设置为:[Schema.Types.Mixed],但它也没有帮助。

当我尝试保存类似于['test', 'test']的内容时,它会保存正常。

我无法弄明白,我做错了什么 有任何想法吗?谢谢

2 个答案:

答案 0 :(得分:0)

let MatchPlayerSchema = new Schema({
    deck: {
        type: Schema.Types.Mixed
    }
});

您应该能够将一系列对象存储到'deck'

答案 1 :(得分:0)

我遇到了同样的问题,并设置了

mongoose.set('debug', true);

帮助我查看猫鼬实际上发送给数据库的信息。

我曾经在模式中

const ChatSchema = mongoose.Schema({
    messages: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Message',
    }],
    isRemoved: {
        type: Boolean,
        default: false,
        required: true
    }
});

将类型切换为mongoose.Schema.Types.Mixed后,它可以正常工作。这就是我调用更新的方式

Chat.findOneAndUpdate({ _id: req.params.chatId }, { $push: { messages: message }},{new: true});