$ push替换数组中的值而不是添加

时间:2018-03-14 15:42:44

标签: javascript node.js mongodb rest mongoose

我是使用nodeJs,mongoose和MongoDB的初学者,我遇到了一个问题,经过几个小时的研究,我无法解决。我会试着清楚地解释一下。

首先,我将简要解释逻辑。我有用户,可以有多个,因此在每个用户中我想要一个 objectId 的数组识别他们拥有的项目

我有User.js和userService.js文件,以及Item.js和itemService.js文件。

我的 User.js 文件如下:

const restful = require('node-restful')
const mongoose = restful.mongoose
const validator = require('validator')
var Schema = mongoose.Schema


const utilizadorSchema = new mongoose.Schema({
    username: { type: String, default: '', required: true, unique: true},
    email: { type: String, default: '', required: true, unique: true, validate: [validator.isEmail, 'Invalid email']},
    password: { type: String, default: '', required: true},
    equipaID: [{ 
        type: Schema.Types.ObjectId, ref: 'Equipa'}],
    itens: [{ 
        type: Schema.Types.ObjectId, ref: 'Item'}],
    poderDeAtaque: { type: Number, default: 10},
    poderDeDefesa: { type: Number, default: 10},
    healthPoints: { type: Number, default: 100},
    classificacaoDuelos: { type: Number, default: 0},
    vitorias: { type: Number, default: 0},
    derrotas: { type: Number, default: 0},
    validado: { type: Boolean, default: false}
})

module.exports = restful.model('Utilizador', utilizadorSchema, 'Utilizadores')

现在,我的 userService.js 文件:

const Utilizador = require('./utilizador')
var item = require('./item')

Utilizador.methods(['get', 'post', 'put', 'delete'])

Utilizador.update(
    {_id: Utilizador._id},
    { $push: {itens: item._id}},
    { upsert: true}
)

module.exports = Utilizador

Item.js

const restful = require('node-restful')
const mongoose = restful.mongoose


const itemSchema = new mongoose.Schema({
    descricao: { type: String, required: true},
    categoria: { type: String, required: true},
    nivel: { type: Number, required: true},
    poderDeAtaque: { type: Number, required: true},
    poderDeDefesa: { type: Number, required: true},
    healthPoints: { type: Number, required: true},
})

module.exports = restful.model('Item', itemSchema, 'Itens')

ItemService.js

const Item = require('./item')

Item.methods(['get', 'post', 'put', 'delete'])

Item.updateOptions({new: true, runValidators: true})

module.exports = Item

所以,我的问题是,我可以成功地将添加到用户,但是,当我尝试添加其他项时对于相同的用户,它会替换数组中的值,而不是添加新的值。我尝试使用 $ addToSet 而不是 $ push ,但没有成功。

0 个答案:

没有答案