私はまだSQLモードから抜け出そうとしています。これは実装上の問題ではなくアーキテクチャ上の問題かもしれませんが、私が達成しようとしている機能を達成するために。モンゴースモデルは配列なしで保存されます
私はユーザーのためのスキーマを持っています。 mongooseを使用してユーザーをmongoDBに退避させます。
スキーマモデルに入力する新しいプロパティがありますが、これは成果と呼ばれ、別のスキーマの成果の配列です。次のようにこれは、ユーザーのスキーマで宣言されています。UserSchema.saveオン
var UserSchema = new Schema({
_id : { type: String, unique: true },
group_id : { type: String, required: true },
username : { type: String, required: true },
achievements : { type: Array }
});
を次のように、私は、同じgroup_id
と一致成果の配列を取得するために実績のモデルを探しています:
exports.create = function(req, res, next) {
var newUser = new User(req.body);
// Populate the achievements (same group_id)
Achievement.find()
.where({ group_id: newUser.group_id })
.select({ _id: 1 })
.exec()
.then(function(achievementsForGroupArray) {
_.forEach(achievementsForGroupArray, function(achievementForGroup) {
newUser.achievements.push(achievementForGroup);
});
})
.catch(function(err) {
return res.status(400).send(err).end();
})
newUser.save(function(err, user) {
// .. generic validation stuff ..
}
上記のように、forEach()
を返す配列のストレートプッシュに置き換えても機能せず、単純にプッシュすることでプッシュを置き換えることもできません。'test'
はまだ入力されません。
保存する前にconsole.log newUser
を入力すると、そこに保存されます。私がconsole.logにuser
の部分にnewUser.save(function(err, user)
の成果はありません。
私のスキーマ設定が間違っているので、Mongoose/MongoDBは正しいタイプではないため、match
が正しくタイプされていません。
EDIT:私はコンソールにログを記録するときに結果があると確信しています。私はforeach内でそれらを見ることができます。
ここに「achievementsForGroupArray」オブジェクトを配置できますか? –