model.Updateã¡ãœããã䜿çšããŠãã¹ããŒãã®å¶çŽã«é¢ä¿ãªãä»»æã®å€ã«æŽæ°ã§ããŸã
ããšãã°ãenumããããã£ãæã€ã¹ããŒããããå Žåãupdateã䜿çšããŠãenumå¶çŽå€ã®ä»»æã®å€ã«å€æŽã§ãããããã»ãããç¡å¹ã«ãªããŸãã
äºæ³ãããåäœã¯ãæŽæ°ãããå€ãæ€èšŒãããªãã£ãå Žåã«ãšã©ãŒãã¹ããŒããããšã§ããã
æåã®ãšã©ãŒã§çµäºãããã©ãããæå®ããããã«ãupdateã¡ãœããã«è¿œå ã®ãªãã·ã§ã³ãææ¡ããŸãã
strict
ã¹ããŒãèšå®ãæå¹ã«ããŠãç¡å¹ãªã¹ããŒããã¹ãç¡èŠããæ®ããæŽæ°ããããšããå§ãããŸãã ãšã©ãŒã¯ã¹ããŒãããŸããã
new SchemaïŒ{..}ã{strictïŒtrue}ïŒ
ã¹ããŒãã«ååšããªããã¹ãèšå®ãããšã¹ããŒããããã model.update
éã«ã¹ããŒãããªããããŒãžãåŸ
æ©ããŠããåæ§ã®ãã«ãªã¯ãšã¹ãããããŸãã ãã¶ãããããäžèšã®PRã«è¿œå ããŠããšã©ãŒãã³ãŒã«ããã¯ã«æž¡ãå¿
èŠããããŸãã
ããã«ã¡ã¯ãè¿ éãªè¿ä¿¡ããããšãããããŸãã
ç§ã¯ç¡å¹ãªãã¹ãåç §ããŠããŸããã§ããããç¹å®ã®ãã¹å ã®å¶çŽãåç §ããŠããŸããã
ãã®äŸãèŠãŠãã ãã
var User = new SchemaïŒ{
ãŠãŒã¶ãŒåïŒ{
ã¿ã€ãïŒæååã
å°æåïŒtrueã
ããªã ïŒtrueã
ãŠããŒã¯ïŒtrue
}ã
ååïŒ {
ã¿ã€ãïŒæååã
ããªã ïŒtrueã
å¿
é ïŒtrueã
äžæïŒfalseã
ã€ã³ããã¯ã¹ïŒtrue
}ã
ãã¹ã¯ãŒãïŒ{
ã¿ã€ãïŒæååã
å¿
é ïŒtrueã
éžæïŒfalseã
ã»ããïŒæå·å
}ã
圹å²ïŒ {
ã¿ã€ãïŒæååã
"ããã©ã«ã"ïŒ 'ãŠãŒã¶ãŒ'ã
"enum"ïŒ['user'ã 'admin'ã 'root']
}ã
äœæããïŒ {
ã¿ã€ãïŒæ¥ä»ã
ãããã©ã«ããïŒDate.now
}
}ã{strictïŒtrue}ïŒ;
users.updateïŒ{"username"ïŒ "test"}ã{"role"ïŒ "thisShowldFail"}ãfunctionïŒerrãvalïŒ{
..ã
}ïŒ;
å³å¯ãªã¹ããŒããªãã·ã§ã³ãæå¹ã«ãªã£ãŠããå Žåã§ãããtestããŠãŒã¶ãŒã«ã¯ãthisShowldFailãã®åœ¹å²ãããããšã«æ³šæããŠãã ããã
ãªã¹ãã¯ãåæåãä»ã®åæ§ã®ãªãã·ã§ã³ãæŽæ°ããã¹ãã§ã¯ãããŸãããïŒ
ããªãã¯æ£ããã§ããããã¯åæåãæ€èšŒããå¿ èŠããããŸãã ã©ããã«ãã±ããããããšæããŸããã
+1ããã®åé¡ã®ããã«#updateã䜿çšã§ããŸããã
.updateã«ãæ°ããããã¥ã¡ã³ã+ .saveãå®è¡ãããã¹ãŠã®ããšãå®è¡ãããããšã¯å¯èœã§ããïŒ
ã¢ãããµãŒããªãã·ã§ã³ã䜿çšãããŠããå Žåã
çŸåšã¯ãããŸãã
ã€ãŸããå®è£ ã¯å¯èœ/èšç»ãããŠããŸãã...ïŒ :)
ããã¯ãããããããŸããã é¢é£ïŒ472
+1
æŽæ°ã§äœ¿çšãããªãã®ã¯å®å šã«çŽæçã§ã¯ãããŸããïŒããã©ã«ããã»ãã¿ãŒãæ€èšŒãåæåã ã³ã¢æäœãã¹ããŒãã«æºæ ããŠããªãå Žåãã¹ããŒãã¯ã©ã®ããã«äœ¿çšãããŸããã
+1
ç§ã¯ãã³ã°ãŒã¹ã倧奜ãã§ããããããæŽæ°ãæ€èšŒããªãå Žåãããã¯ç§ã«ãšã£ãŠã¯ããã«åœ¹ã«ç«ã¡ãŸããã 倧ããªããã¥ã¡ã³ãããããæ€èšŒã®ããã ãã«ããŠã³ããŒãããããããŸããã
ããã¯ç§ãé£ã³èŸŒãã§ããããšã§ããç§ã¯ãããå®è£
ããããšããŠãå°ãé£ã³èŸŒã¿ãŸãã
ç®æšã¯æ¬¡ã®ããšã§ãã
ç§ãæåãããã©ããããããããŸããããç§ã¯ããããã£ãŠã¿ãŸãã ããªããŒã¿ãŒããå§ããŸãã
幞éãç¥ããŸãïŒ
ã¡ã«ã¯ã
+1
+1
.update
ãæ€èšŒããµããŒãããŠããã°ããã°ããããšæããŸãã
ãã³ã+1
ã§ããŒãã®ãã³ã+1
æŽæ°æã«æ€èšŒãè¿œå ããŠãã ããïŒ
+1
ç·šéïŒ-2ãã³ã°ãŒã¹ãæ€èšŒãæ åœããã¹ãã§ã¯ãªããšæãã®ã§..æ€èšŒãå¿ èŠãªå Žåã¯ãJSONã¹ããŒãæ€èšŒãèš±å¯ãããã®ã®ãããªä»ã®ç¹æ®ãªã©ã€ãã©ãªã®äœ¿çšãæ€èšããå¿ èŠããããŸã
@thalesfspã¯ãã ããã¯éå»ã«è©Šã¿ãããŸããããããã¥ã¡ã³ããã¡ã¢ãªã«ååšãããããã€ãã®ç¶æ³ã§å£ããŠåäœã«äžè²«æ§ããªãæ··ä¹±ãããããã«ãŒã«ãéåžžã«äžå®å®ã«ãªããŸãã
ãªãŒãã³ãœãŒã¹ã®çŸããïŒæ©èœãå¿ èŠãªå Žåã¯ããããèšè¿°ããŠãæ£ããæ©èœããããšã蚌æãããã¹ããšããã¥ã¡ã³ãã«åæ Œãããã«ãªã¯ãšã¹ããéä¿¡ã§ããŸãã
ããªãæ·±å»ãªå¶éã ããããé©çšããå Žåãã¹ããŒããªããžã§ã¯ããçŽæ¥ã¯ããŒã«ããŠãããªããŒã¿ãŒãå®è¡ããå¿ èŠããããã©ãããå€æããã®ãçŸå®çã§ããããã ç§ã¯äž»ã«ãæŽæ°ã«é©çšãããã«ã¹ã¿ã ããªããŒã¿ãŒãšåæåã«ãŒã«ã«é¢å¿ããããŸãã ä»ã®ã¹ããŒãå¶çŽã¯ãããã¥ã¡ã³ããä¿åããããšãã«ãã§ã«é©çšãããŠããã¯ãã ãšæããŸãã åæåãšããªããŒã¿ãŒã ãã«è³ããŸã§åé¡ããã®ããã«åçŽåããããšã¯çã«ããªã£ãŠãããæŽæ°äžã«ããã¥ã¡ã³ããçšæããå¿ èŠããªããªããŸããïŒ
+1ãã³ããããã¯éåžžã«äŸ¿å©ãªæ©èœã§ã-æŽæ°ãè¡ããšããã¹ããŒãããæå°/æ倧ãªã©ãå°éãããããšã確èªããã-ããã§ãªããã°ããã³ã°ãŒã¹ãã§ããããšã®ããã«å€ãã®å®åããžãã¯ãå®è¡ããŠããŸã
ãããèµ·ããã®ãèŠãã®ã¯çŽ æŽãããããšã§ãã çŸæç¹ã§ã®åé¿çã¯ããªããžã§ã¯ããèŠã€ãããã£ãŒã«ããå€æŽããŠããä¿åããããšã§ããããã«ãããæ€èšŒããã«ãŠã§ã¢ãèµ·åããŸãã ããã¥ã¡ã³ãã«ãããšïŒ
Tank.findById(id, function (err, tank) {
tank.size = 'large';
tank.save(function (err) {
// Document updated, do something with it
});
});
update
ã³ãã³ãã¯Mongoã«çŽæ¥å§ä»»ãããããã¥ã¡ã³ãå
šäœãæ€èšŒã®ããã«ã¡ã¢ãªã«ä¿åãããªããããããã¯æ³šæãå¿
èŠã§ãã ãããã£ãŠã @ BrianHoldsworthã«ãã£ãŠææ¡ãããã¢ãããŒãã¯ãæŽæ°ããããã£ãŒã«ãã«å¯ŸããŠã®ã¿æ€èšŒãå®è¡ããã¹ããŒãã解æããããšããå§ããã®ã«é©ããå Žæã®ããã§ãã
@aheckmannã¯ããã®ããããè©Šã¿ã人ãåãééããäºåºŠãšèµ·ãããªãããã«ã以åã®ïŒå€±æããïŒå®è£ äœæ¥ã®è©³çŽ°ãæããŠããã ããŸããïŒ
ç§ã¯äž»ã«ãæŽæ°ã«é©çšãããã«ã¹ã¿ã ããªããŒã¿ãŒãšåæåã«ãŒã«ã«é¢å¿ããããŸãã ä»ã®ã¹ããŒãå¶çŽã¯ãããã¥ã¡ã³ããä¿åããããšãã«ãã§ã«é©çšãããŠããã¯ãã ãšæããŸãã åæåãšããªããŒã¿ãŒã ãã«è³ããŸã§åé¡ããã®ããã«åçŽåããããšã¯çã«ããªã£ãŠãããæŽæ°äžã«ããã¥ã¡ã³ããçšæããå¿ èŠããªããªããŸããïŒ
@BrianHoldsworthããã¯åçŽåãrequired: true
æ€èšŒå¶çŽã®ãããã£ãŒã«ãã空ã®æååã«æŽæ°ãããå Žåã¯ã©ããªããŸããïŒ æ€èšŒãšã©ãŒãçºçãããã«ã¯ããããå¿
èŠã«ãªããŸãã
ç§ãããã«èå³ããããŸãã ããããã.updateïŒïŒã¡ãœããããªãŒããŒã©ã€ãããŠæ€èšŒãå®è¡ãããã©ã°ã€ã³ãäœæã§ããŸããïŒ ããããã°ãéšåçãªãœãªã¥ãŒã·ã§ã³ã§ãå®è£ ã§ããŸãã äžæ¹ãã³ã¢ã«ããå Žåã¯ãããããçš®é¡ã®æ€èšŒãåŠçãã100ïŒ å ç¢ã§ããããšãæåŸ ãããŸãã
ã«ã¹ã¿ã ããªããŒã¿ãŒãšåæåã®äž¡æ¹ã§ãããã«ãééããŸããã æ€çŽ¢ããŠããæŽæ°ããããšã¯å¯èœã§ãããããã¥ã¡ã³ãã®ãµãããã¥ã¡ã³ãæ§é ãç°ãªãå Žåãäžè¬çãªã±ãŒã¹ã³ãŒããèšè¿°ããããšã¯éåžžã«å°é£ã§ãã
+1ãã³ãããã
ãã©ã€ã¢ã³ã®ãœãªã¥ãŒã·ã§ã³ã¯ããªããšã¬ã¬ã³ãã«èŠããŸãã ããããããŒã¿çã«éãããšãã«éç¥ãåãåãããã§ãã
+1
ãã®+1ãå¿ èŠ
+1
+1
+1
+1
3.9.3ã§ã¯ã update()
ã«setDefaultsOnInsert
ãšrunValidators
2ã€ã®ç¹å¥ãªãªãã·ã§ã³ããããããã©ã«ããèšå®ããŠã¯ãšãªã§ããªããŒã¿ãŒãå®è¡ããŸãã ããšãã°ããã¹ããåç
§ããŠãã ãããå®éã®ããã¥ã¡ã³ãã¯ãŸã ãããŸãã:(
ã©ããããããšãããããŸãã-ããã¯çŽ æŽãããä¿®æ£ã§ãïŒ
@ vkarpov15ç§ã¯ããªãã®ã³ãŒãã䜿çšããŠã
ããã«ã¡ã¯ãã¢ããããŒãæã«æ€èšŒã䜿çšããããã«ãå®å®ããŒãžã§ã³3.9ããã€ãªãªãŒã¹ããããç¥ã£ãŠããŸããïŒ
ããããšã
@AlexandreAWEè¯ã質åã§ãã ç§ã¯çŸåšã4.0ãš3.9.xãã©ã³ãã®ããŒã¿ãã¹ãã§ç©äºããŸãšããŠããŸãããä»ã¯ãå®äºãããå®äºããŸãããšããããšã§ãã ã¯ãªã¹ãã¹åã«RCãåºãããã§ãã
@ vkarpov15 3.9.xã®å®å®çã§ã¯ã©ãã§ããïŒ çŸåšã®ãããžã§ã¯ããæ¯åèŠã€ããŠä¿åãã代ããã«ãæŽæ°æã«æ€èšŒãè¡ãã®ã¯çŽ æŽãããããšã§ãã
@andrewholstedã¯ã mongodbãã©ã€ããŒ2.0ãšmongodbãµãŒããŒ2.8ãå®å®ããã®ãåŸ ã£ãŠããŸããããã¯ä»æè¡ãããããšãé¡ã£ãŠããŸãããææ°ããŒãžã§ã³ã®mongodbãšææ°ãã©ã€ããŒããµããŒãããªããš4.0ãåºè·ããããšã¯ã§ããŸããã 詳现ã«ã€ããŠã¯ãç§ã®ããã°ãåç §ã
ç§ã«ããæœåšçã«ã°ããã質åã§ãããmongodbã«æž¡ãåã«ãæŽæ°ãããŠããããŒã¿ãååŸããã¹ããŒãã«å¯ŸããŠæ€èšŒããŠã¿ãŸãããïŒ
ãŸãã+ 1
ããŒã¯ããŠåŸ ã€
3.9ãå®å®ãããŸã§åŸ ã€ããšã¯ã§ããŸãã:)
ãã®æ©èœã¯ãŸã ãããŸããïŒ 3.9ãç±å¿ã«åŸ ã£ãŠããŸãã
npm install mongoose@unstable
ã䜿çšããŠãäžå®å®ãªããŒãžã§ã³ãååŸã§ããŸãã 4.0ã®çŸåšã®ETAã¯3æ25æ¥ã§ã-ããã確èªããã®ã«é©ããå Žæã¯ãã€ã«ã¹ããŒã³ããŒãžã§ã
æšå€ãã®åé¡ã«ééããŸããã ç§ã ããããªããŠããã£ãïŒ ãã®å€æŽããªãªãŒã¹ãããããšã«è奮ããŠããŸããããããšãããããŸããã
+1
ãã®åé¡ãã¯ããŒãºãšããŒã¯ãããŠããçç±ãããããŸããã ç§ã¯ãŸã ããã«çŽé¢ããŠããŸãã
runValidatorsãtrueã«èšå®ãããŠããŠãããããfindOneAndUpdateïŒïŒã®åæåæ€èšŒã§æ©èœãããã©ããã¯å®éã«ã¯ããããŸããã
@ m1cahã¯ãããªããããããšããŠããããšã瀺ãäŸãæäŸããŠãã ããã ããã«ã€ããŠã®ãã¹ãããããåæ ŒããŠããŸã...
@ vkarpov15ããã¯ããã瀺ãçãäŸã ãšæããŸãïŒ http ïŒ //code.runnable.com/VYhGbVhereIYdbst/update-validation-enum-for-mongoose-and-databases
1ã€ã®åé¡ã¯ãäžèšã®äŸãå å²æ代ã®ãã³ã°ãŒã¹ã䜿çšããŠããããšã§ãã
root<strong i="6">@runnable</strong>:~# head node_modules/mongoose/package.json
{
"name": "mongoose",
"description": "Elegant MongoDB object modeling for Node.js",
"version": "3.6.14",
"author": {
"name": "Guillermo Rauch",
"email": "[email protected]"
},
"keywords": [
"mongodb",
4.xã«ã¢ããã°ã¬ãŒãããŠã¿ãŠãã ãããåäœããã¯ãã§ãã
åæåãšfindOneAndUpdateã¡ãœããã§åäœããŸããïŒ
ãã³ã°ãŒã¹4.2.6ã§ã¯å€±æããããã§ãããæªãå€ãèšå®ã§ããŸãã
ã¹ããŒãïŒ
var UserSchema = new Schema({
first_name: {
type: String,
required: true,
},
last_name: {
type: String,
required: true,
},
email: {
type: String,
unique: true,
required: true,
},
embededData: [{
type: {
type: String,
enum: ['value1', 'value2', 'value3']
required: true
}
}]
}, { strict: true });
FindOneAndUpdateã¡ãœããïŒ
UserModel.findOneAndUpdate(
{_id: uid},
{$push: {embededData: data}},
{ runValidators: true }, function(err) {
});
次ã«ã embededData.type = 'Panda';
ããã·ã¥ã§ããŸã
æŽæ°ããªããŒã¿ãŒã®ããã¥ã¡ã³ããšïŒ2933ãåç
§ããŠãã ãã-æŽæ°ããªããŒã¿ãŒã¯$push
ã§ã¯å®è¡ãããã $set
ãš$unset
+1
ç§ãèŠãéããããã¯ãé åã§ãããã£ãŒã«ãã§ã«ã¹ã¿ã ããªããŒã¿ãŒã䜿çšããŠããå Žåã«ã¯ãŸã æ©èœããŸããã
ããšãã°ã次ã®ã³ãŒãã¹ããããïŒ
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/myTestDB');
var db = mongoose.connection;
db.on('error', function (err) {
console.log('connection error', err);
});
db.once('open', function () {
console.log('connected.');
});
var Schema = mongoose.Schema;
var userSchema = new Schema({
_id : String,
name : {
type: [String],
validate: {
validator: function (str) {
return str.length > 1
}
},
}
});
var User = mongoose.model('User', userSchema);
User.findOneAndUpdate({"name": ["John", "Doe"]}, {
$setOnInsert: {
name: ["John"],
},
}, { runValidators: true, upsert: true, new: true }, function (err, data) {
if (err) {
return console.log(err);
} else {
// console.log(data.validateSync())
return console.log('Updated', data);
}
});
å«ãŸããŠããã«ã¹ã¿ã ããªããŒã¿ãŒã1以äžã®é·ãã®ååé
åãæ瀺çã«çŠæ¢ããŠããå Žåã§ãããšã©ãŒãã¹ããŒããã«["John"]ã®name
ãã£ãŒã«ããæã€ããã«ãŠãŒã¶ãŒãæŽæ°ã§ããŸãã console.log(data.validateSync())
è¡ã®ã³ã¡ã³ãã解é€ããŠæ€èšŒã匷å¶ãããšãå®éã«ã¯é©åãªãšã©ãŒã¡ãã»ãŒãžãè¿ãããããšãããããããã«ãããªããŒã¿ãŒèªäœã¯åé¡ãªãæ©èœããŸãã åé¡ã¯ã runValidators=true
ãªãã·ã§ã³ãå«ããŠããã«ããããããããã®æ€èšŒãfindOneAndUpdate()
åŒã³åºãå
ã§è¡ãããŠããªãããšã§ãã
ãã°ã®ããã§ãããå¥ã®åé¡ãéãããšãã§ããŸããïŒ
ã¯ãã httpsïŒ//github.com/Automattic/mongoose/issues/4039ãéããŸãã
ããããšã
äžèšã®åé¡ã«å¯ŸããŠå©çšå¯èœãªä¿®æ£ã¯ãããŸããïŒ @ vkarpov15
@ Saravanan90æå³ã®ããæ å ±ããªããŸãŸãé·æã«ããã£ãŠè§£æ±ºãããåé¡ã«ã€ããŠã³ã¡ã³ãããã®ã¯ãããŠãã ããã ã³ãŒããµã³ãã«ã§å¥ã®åé¡ãéããŸãã
æãåèã«ãªãã³ã¡ã³ã
+1
æŽæ°ã§äœ¿çšãããªãã®ã¯å®å šã«çŽæçã§ã¯ãããŸããïŒããã©ã«ããã»ãã¿ãŒãæ€èšŒãåæåã ã³ã¢æäœãã¹ããŒãã«æºæ ããŠããªãå Žåãã¹ããŒãã¯ã©ã®ããã«äœ¿çšãããŸããã