我是使用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 ,但没有成功。