Мое определение схемы, как показано ниже. UserSchema имеет встроенные карты, которые в свою очередь, имеет много сделок ..Подгрузочный файл обновления Mongoose подкаталога
var TransactionSchema = new Schema({
merchantName: String,
transactionTime: Date,
latitude: Number,
longitude: Number,
amount: Number
});
var CardSchema = new Schema({
cardIssuer: String,
lastFour: String,
expirationDate: String,
transactions : [TransactionSchema]
});
/*
* ...User Schema...
*/
var UserSchema = new Schema({
name: String,
email: { type: String, lowercase: true },
role: {
type: String,
default: 'user'
},
hashedPassword: String,
provider: String,
salt: String,
imageURL: String,
phoneNumber: String,
card: [CardSchema]
});
Я хочу, чтобы добавить транзакцию на карту уже в userschema, но я не знаю, как это сделать в мангуста/MongoDB
I идентифицировать пользователь и карту следующим образом ..
вызова апи проходит через Идент промежуточного слой первого
function isAuthenticated() {
return compose()
// Validate jwt
.use(function(req, res, next) {
// allow access_token to be passed through query parameter as well
if(req.query && req.query.hasOwnProperty('access_token')) {
req.headers.authorization = 'Bearer ' + req.query.access_token;
}
validateJwt(req, res, next);
})
// Attach user to request
.use(function(req, res, next) {
User.findById(req.user._id, function (err, user) {
if (err) return next(err);
if (!user) return res.send(401);
req.user = user;
next();
});
});
}
// This is update based on Neil's answer below...
exports.create = function(req, res) {
//var userItem = req.user;
//console.log(userItem._id);
//console.log(req.params.card);
Transaction.create(req.body, function(err, transaction){
console.log(transaction);
//id = mongoose.Types.ObjectId;
User.findOneAndUpdate({"card._id":id(req.params.card)},{
// $set : {
// role: 'user1'
// } ---- this update operation works!!
"$push": {
"card.$.transactions": transaction
} // -- this update operation causes error ...
}, function(err,user) {
// updated document here
console.log('err' + err + " user " + user) ;
return res.json(200, user);
}
)
// }
// })
})
};
Я не уверен, но получаю RangeError: Максимальный размер стека вызовов превышен, когда я пытаюсь выполнить приведенный выше код. – rOrlig
@gaurav Похоже, вы что-то делаете внутри цикла. Не уверен, что вы делаете, не отправляя код. –
hi neil, я ничего не делаю в цикле. Мне пришлось изменить ваш ответ на поиск ObjectId(), но я все равно получаю ту же ошибку. Если я не выполняю операцию push, я не получаю ошибку. – rOrlig