λ΄ν¬λ λ¬Έμ λ°°μ΄μ΄ μμΌλ©°, μ΄λ₯Ό λ³κ²½νκ³ λͺ¨λΈμμ .save()λ₯Ό μννλ©΄ λ΄ν¬λ λ¬Έμμ λ³κ²½ μ¬νμ΄ μ μ₯λμ§ μμ΅λλ€.
λ€μμ λ΄ λͺ¨λΈκ³Ό μ€ν€λ§μ λλ€(κ°κ²°ν¨μ μν΄ μΌλΆ μλ΅).
var Votes = new mongoose.Schema({
date: Date,
user_name: String,
is_up: Boolean
});
var EventSchema = new mongoose.Schema({
to_date: Date,
from_date: Date,
location: String,
name: String,
suggested_by: String,
description: String,
users: [EventUser],
comments: [Comments],
suggestions: [Event],
votes: [Votes]
});
var Event = mongoose.model('Event', EventSchema);
event.save()κ° νΈμΆλκΈ° μ μ λͺ¨λΈ:
{
__v: 1,
_id: 509e87e583ccbfa00e000004,
description: 'Pfft',
from_date: Sun Nov 11 2012 08:00:00 GMT-0500 (EST),
location: 'Home',
name: 'Whatever',
suggested_by: 'No one',
to_date: Sun Nov 11 2012 00:00:00 GMT-0500 (EST),
votes: [],
suggestions:
[ { users: [],
comments: [],
suggestions: [],
votes: [],
_id: 509e880883ccbfa00e000005,
suggested_by: 'Some one',
to_date: Sun Nov 11 2012 04:00:00 GMT-0500 (EST),
from_date: Mon Nov 12 2012 00:00:00 GMT-0500 (EST),
location: 'Home',
name: 'Football',
description: 'FOOTBALL!!' } ],
comments: [],
users: []
}
event.save()
κ° νΈμΆλκΈ° μ§μ μ μ€μ²©λ ν¬νκ° μλ λμΌν κ°μ²΄κ° νΈμΆλ©λλ€.
{
"__v":1,
"_id":"509e87e583ccbfa00e000004",
"description":"Pfft",
"from_date":"2012-11-11T13:00:00.000Z",
"location":"Home",
"name":"Whatever",
"suggested_by":"No one",
"to_date":"2012-11-11T05:00:00.000Z",
"votes":[ ],
"suggestions":
[ {
"users":[],
"comments":[ ],
"suggestions":[ ],
"votes":
[{
"is_up":true,
"date":"2012-11-10T18:05:25.796Z",
"user_name":"No one"
}],
"_id":"509e880883ccbfa00e000005",
"suggested_by":"Some one",
"to_date":"2012-11-11T09:00:00.000Z",
"from_date":"2012-11-12T05:00:00.000Z",
"location":"Home",
"name":"Football",
"description":"FOOTBALL!!"
}],
"comments":[],
"users":[]
}
event.save()κ° νΈμΆλλ©΄ μ€λ₯κ° λ°μνμ§ μμ§λ§ μ€μ²©λ μ΄λ²€νΈ μ€ν€λ§ λ΄λΆμ μ€μ²©λ ν¬ν μ€ν€λ§λ μ€μ λ‘ μ μ₯λμ§ μμ΅λλ€. μ΅μμ μ΄λ²€νΈ κ°μ²΄μμ λμΌν μ 체 λ Όλ¦¬λ₯Ό μ¬μ©νμ¬ ν¬νλ₯Ό μ μ₯νλ©΄ μλν©λλ€.
μ½λλ₯Ό μ΄ν΄λ³΄λ©΄ κ°λ¨ν .save()κ° μ κ°μ²΄λ₯Ό μ μ₯νκ³ μ΄λ―Έ μ‘΄μ¬νλ κ°μ²΄λ₯Ό μ λ°μ΄νΈνλ μ§λ¦κΈΈμ΄λΌκ³ κ°μ ν©λλ€.
λ΄ μ§κ°μ Model.prototype._deltaκ° λͺ¨λ μ€μ²©λ κ°μ²΄λ₯Ό μ‘μ λ§νΌ μΆ©λΆν κΉμ΄μ§μ§ μλλ€λ κ²μ λλ€. https://github.com/LearnBoost/mongoose/blob/master/lib/model.js#L529
λ¬Έμ λ₯Ό μ¬ννλ λ° μ¬μ©νλ μ½λλ ν¬ν¨νμμμ€(μ μ₯νκΈ° μ μ λ¬Έμλ₯Ό μ‘°μνλ μμΉ λ±).
λ¬Όλ‘ , μ¬κΈ°μ μ½λ λ²½μ νΌνκΈ° μν΄ μμ μ κ²μνμ΅λλ€. https://gist.github.com/4055392
λλ μ΅μμ μ΄λ²€νΈμ ν¬νλ₯Ό μ μ₯νλ κ²(μλ)κ³Ό μ€μ²©λ μ΄λ²€νΈμ ν¬νλ₯Ό μ μ₯νλ κ²(μλνμ§ μμ)μ λͺ¨λ ν¬ν¨νμ΅λλ€. 보μλ€μνΌ ν¬νλ₯Ό μΆκ°νκ±°λ μ λ°μ΄νΈν λ€μ λΉμ·ν λ°©μμΌλ‘ μ μ₯ν©λλ€.
suggestions
μ¬μ©λ EventSchema μ°Έμ‘°λ₯Ό μμ ν΄ λ³΄μΈμ.
// bad
var EventSchema = new mongoose.Schema({
suggestions: [EventSchema] <== at this time, EventSchema is undefined which is interpreted as Mixed
// instead...
var EventSchema = new mongoose.Schema;
EventSchema.add({
suggestions: [EventSchema] <== EventSchema exists
})
λ«κΈ°, μλ΅μ΄ μμ΅λλ€. νμν κ²½μ° λ€μ μ΄μ΄μ£ΌμΈμ.
.save()κ° ν¬ν¨λ κ°μ²΄λ₯Ό μ λ°μ΄νΈνμ§λ§ μ€μ λ‘ mongodbμ μ μ₯λμ§ μμ λ¬Έμλ₯Ό λ°ννλ λμΌν λ¬Έμ κ° μμ΅λλ€. λμμ£ΌμΈμ.
@ Manojkumar91 μ΄κ²μ μ¬ν νλ μ½λλ₯Ό μ 곡ν μ μμ΅λκΉ? λ§€μ° λμμ΄ λ κ²μ λλ€ :)
λλ μ΄κ²μ κ²½ννμ΅λλ€. μ¬κΈ° λ΄ λͺ¨λΈμ΄ μμ΅λλ€.
/*jslint node:true */
"use strict";
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var measurement = new Schema({
name: {type: String, required: true},
instruction: {type: String, required: true}
});
var size = new Schema({
name: {type: String, required: true},
lengths: [String]
});
var chartSchema = new Schema({
name: {type: String, required: true },
diagram: {type: String, required: true },
description: {type: String, required: true},
totalMeasurements: {type: Number, required: true},
totalSizes: {type: Number, required: true},
measurements: [measurement],
sizes: [size]
});
module.exports = mongoose.model('chart', chartSchema);
μ΄κ²μ ν¨μ¬ λ ν° μ±μ μΌλΆμ΄λ―λ‘ κ΄λ ¨ 컨νΈλ‘€λ¬ μμ νν°λ§ ν¬ν¨νκ³ λλ¨Έμ§λ λ ν° μλ―Έλ‘ λ§ν μ μμ΅λλ€. μλλ νν° μ½λμ λλ€.
module.exports = function (next) {
var paramCounter = 1,
outerLoopCounter = 0,
existingSizes = this.chart.sizes.length,
outerLoopEdge = this.chart.totalSizes,
innerLoopCounter = 0,
innerloopEdge = this.chart.totalMeasurements - 1,
size = {name: null, lengths: [] };
if (this.req.method && this.req.method === "POST") {
for (outerLoopCounter;
outerLoopCounter < existingSizes;
outerLoopCounter = outerLoopCounter + 1) {
this.chart.sizes[outerLoopCounter].name =
this.param("name_" + paramCounter);
for (innerLoopCounter;
innerLoopCounter <= innerloopEdge;
innerLoopCounter = innerLoopCounter + 1) {
this.chart.sizes[outerLoopCounter].lengths[innerLoopCounter] =
this.param(this.chart.measurements[innerLoopCounter].name);
}
paramCounter = paramCounter + 1;
innerLoopCounter = 0;
}
for (outerLoopCounter;
outerLoopCounter < outerLoopEdge;
outerLoopCounter = outerLoopCounter + 1) {
size.name = this.param("name_" + paramCounter);
for (innerLoopCounter;
innerLoopCounter < innerloopEdge;
innerLoopCounter = innerLoopCounter + 1) {
size.lengths.push(
this.param(this.chart.measurements[innerLoopCounter].name
+ "_" + paramCounter)
);
}
this.chart.sizes.push(size);
paramCounter = paramCounter + 1;
innerLoopCounter = 0;
size = { name: null, lengths: [] };
}
this.chart.save(function (err) {
if (err) {
console.log(err);
}
this.chart_info = "measurements for <strong>" + this.chart.name + "</strong> saved.";
this.render("display");
}.bind(this));
} else {
next();
}
};
μ€μ λ‘ μ΄ νν°λ₯Ό μ€ννκΈ° μ μ μΈ‘μ κ° λ° ν¬κΈ°μ 2μ°¨μ λ°°μ΄μ κΈ°λ°μΌλ‘ μν μ’ μ μμ ꡬ쑰λ₯Ό μμ±νλ νν°κ° νΈμΆλ λ€μ μ΄ μμ λͺ©λ‘μ ꡬ문 λΆμνμ¬ μ λ°μ΄νΈλ₯Ό μ 곡ν©λλ€. λλ―Έ λ°μ΄ν°λ‘ ν μ€νΈνμΌλ©° μ½μμμ κ°μ Έμ¨ νμ¬ λλ―Έ μ°¨νΈλ λ€μκ³Ό κ°μ΅λλ€.
> db.charts.find();
{ "_id" : ObjectId("553da6c3d3d0940a640e878c"), "name" : "Chart With Measurements", "diagram" : "http://res.cloudinary.com/harung71k/image/upload/v1430103747/nd4gipcxnykbbcpcztp9.jpg", "description" : "<p>This is a test of the new measurement methodology, it works.</p>", "totalMeasurements" : 4, "totalSizes" : 3, "sizes" : [ { "name" : "Small", "_id" : ObjectId("554183ed63c5945b73b8a8e7"), "lengths" : [ "1", "2", "3", "4" ] }, { "name" : "Medium", "_id" : ObjectId("554183ed63c5945b73b8a8e8"), "lengths" : [ "5", "6", "7", "8" ] }, { "name" : "Large", "_id" : ObjectId("554183ed63c5945b73b8a8e9"), "lengths" : [ "9", "10", "11", "12" ] } ], "measurements" : [ { "name" : "Fuzz", "instruction" : "<p>Fuzz Instructions</p>", "_id" : ObjectId("553dadd253eb9f996c68a381") }, { "name" : "Buzz", "instruction" : "<p>Buzz Instructions</p>", "_id" : ObjectId("553dadd253eb9f996c68a382") }, { "name" : "Beatles", "instruction" : "<p>Beatles Instructions</p>", "_id" : ObjectId("553dadd253eb9f996c68a383") }, { "name" : "Stones", "instruction" : "<p>Stones instructions</p>", "_id" : ObjectId("553ee7a09ff8c567004bd261") } ], "__v" : 3 }
λλ ν¬κΈ°[0].lengths[0] μ¬λ‘―μ "1111"μ μ λ ₯μ΄ μ£Όμ΄μ§κ³ μ μ₯νκΈ° μ§μ μ μμ λ ν¬κΈ° λ°°μ΄μ ν μ€νΈνκ³ μ΄κ²μ λ Έλμμ κ²μ¬ν λ λ¬Έμμ νμλμ§λ§ μ μ₯μ μ νν λ°νλ©λλ€ μ¬μ μ μ₯κ³Ό λμΌν λ¬Έμμ λλ€.
μΆκ° μΈλΆμ λ³΄κ° νμν κ²½μ° μλ €μ£ΌμΈμ.
@crispen-smith μ€λͺ
μ΄ νμν©λλ€. μ½λκ° λ무 λ§μμ μ½κ² μ΄ν΄ν μ μμ΅λλ€. require('mongoose').set('debug', true);
λͺ½κ΅¬μ€μ λλ²κ·Έ λͺ¨λλ₯Ό νμ±ννκ³ μΆλ ₯μ κ²μν μ μμ΅λκΉ? κ·Έλ¬λ©΄ μλ²λ‘ μ μ‘λλ 쿼리μ μ°κΈ°κ° νμλ©λλ€.
μ, λ§μ μ½λμ΄μ§λ§ λμμ... μ½κ² μ€λͺ νκΈ°μλ μΆ©λΆνμ§ μμ΅λλ€.
λ°λΌμ λλ²κ·Έλ₯Ό μ€ννλ κ²μ μ μ₯μ΄ μ μ€λμ§ μλλ€λ κ²μ μμνλ κ² κ°μ΅λλ€. λ€μμ μ΄λ¦μ λ³κ²½ν μ μ₯μ λλ€.
Mongoose: charts.findOne({ name: 'Chart With Measurements' }) { fields: undefined }
Mongoose: charts.update({ _id: ObjectId("553da6c3d3d0940a640e878c"), __v: 3 }) { '$set': { 'sizes.0.name': 'Smaller' } } {}
λ€μμ λ¬Έμμ΄ λ°°μ΄μμ μ΄λ¦κ³Ό κ°μ λ³κ²½νμ¬ λμΌν μμ μμλ₯Ό μ€ννλ κ²μ λλ€.
Mongoose: charts.findOne({ name: 'Chart With Measurements' }) { fields: undefined }
Mongoose: charts.update({ _id: ObjectId("553da6c3d3d0940a640e878c"), __v: 3 }) { '$set': { 'sizes.0.name': 'Small' } } {}
κ·Έλ¦¬κ³ λ°°μ΄ λ΄λΆμ λ³μλ§ λ³κ²½νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
λͺ½κ΅¬μ€: chart.findOne({ μ΄λ¦: 'μΈ‘μ μ°¨νΈ' }) { νλ: μ μλμ§ μμ }
(μ, κ·ΈλΏμ
λλ€... μ
λ°μ΄νΈ 쿼리 μμ)
μ μ΄λ λΉλΆκ°μ λ§€λ² μ 체 νμ λ¬Έμλ₯Ό μμ νμ¬ ν¨μΉλ₯Ό μλν κ²μ λλ€. μ΄ νΉμ λͺ©μ μ μν΄ μ°Έμ‘° 무결μ±μ΄λ κ°μ²΄ IDκ° νμνμ§ μμ΅λλ€.
--μ
λ°μ΄νΈ--
μμ νκ³ μλ‘κ³ μΉ¨λ ν΄λ΄€λλ° μλλ€μ. μ΄ μ‘°κ°μ λν μΆλ ₯ μΆμ μ΄ μμ§λ§ μμ ν΄λ λ°±μλ μμ
μ΄ νΈλ¦¬κ±°λμ§ μλ κ² κ°μ΅λλ€. νΈλ¦¬κ±°λμ§ μλ μΌμ’
μ λν° κ²μ¬κ° μμ΅λκΉ?
μμ λ΄ λ©λͺ¨λ₯Ό κ°μν λ μ΄κ²μ λ€μ μ΄ μ μλ μ΅μ μ΄ μμ΅λκΉ?
@crispen-smithλ μ΄ λ¬Έμ λ₯Ό λ 립 μ€νν μ€ν¬λ¦½νΈλ‘ μ¬ννκΈ° μν κΈ°λ³Έμ μΈ μλμ λλ€.
var mongoose = require('mongoose');
mongoose.set('debug', true);
var util = require('util');
var assert = require('assert');
mongoose.connect('mongodb://localhost:27017/gh1204');
var Schema = mongoose.Schema;
var measurement = new Schema({
name: {type: String, required: true},
instruction: {type: String, required: true}
});
var size = new Schema({
name: {type: String, required: true},
lengths: [String]
});
var chartSchema = new Schema({
measurements: [measurement],
sizes: [size]
});
var Chart = mongoose.model('gh1204', chartSchema);
Chart.create({}, function(error, chart) {
assert.ifError(error);
chart.sizes.push({ name: 'bacon', lengths: ['25'] });
chart.save(function(error, chart) {
assert.ifError(error);
assert.equal(chart.sizes[0].lengths.length, 1);
assert.equal(chart.sizes[0].lengths[0], '25');
console.log('done');
process.exit(0);
});
});
μμ§ μ£Όμ¬μκ° μμ΅λλ€. μμλλ‘ μ€νλ©λλ€. λ³΄κ³ μλ λ¬Έμ λ₯Ό 보μ¬μ£ΌκΈ° μν΄ μμ μλ₯Ό μμ ν μ μμ΅λκΉ? λλ λΉμ μ μ°λ¬Έ μ€λͺ μ μ½λλ‘ λ²μν μ μμμ΅λλ€.
λ¬Όλ‘ μ λλ€. μ€λ μ λ μ μ‘°κΈ μ΄λ° μ΄ν΄λ³΄κ² μ΅λλ€.
μλν΄ λ³΄μκ² μ΅λκΉ?
/*jslint node:true */
"use strict";
var mongoose = require('mongoose');
mongoose.set('debug', true);
var util = require('util');
var assert = require('assert');
mongoose.connect('mongodb://localhost:27017/gh1204');
var Schema = mongoose.Schema;
var measurement = new Schema({
name: {type: String, required: true},
instruction: {type: String, required: true}
});
var size = new Schema({
name: {type: String, required: true},
lengths: [String]
});
var chartSchema = new Schema({
measurements: [measurement],
sizes: [size]
});
var Chart = mongoose.model('gh1204', chartSchema);
Chart.create({}, function (error, chart) {
assert.ifError(error);
chart.sizes.push({ name: 'bacon', lengths: ['25'] });
chart.save(function (error, chart) {
assert.ifError(error);
assert.equal(chart.sizes[0].lengths.length, 1);
assert.equal(chart.sizes[0].lengths[0], '25');
console.log('Created Index');
chart.sizes[0].lengths[0] = "20";
chart.save(function (error, chart) {
assert.ifError(error);
assert.equal(chart.sizes[0].lengths.length, 1);
assert.equal(chart.sizes[0].lengths[0], '25');
console.log('Created Index');
process.exit(0);
});
});
});
λ΄ λ Έλ μ½μμ μ½μ μΆλ ₯μ λ€μκ³Ό κ°μ΅λλ€.
Crispens-MacBook-Pro:mongooseTest crispensmith$ node index.js
Mongoose: gh1204.insert({ _id: ObjectId("5580d0c44d32b07971dfd281"), sizes: [], measurements: [], __v: 0 })
Mongoose: gh1204.update({ __v: 0, _id: ObjectId("5580d0c44d32b07971dfd281") }) { '$set': { measurements: [] }, '$pushAll': { sizes: [ { name: 'bacon', _id: ObjectId("5580d0c44d32b07971dfd282"), lengths: [ '25' ] } ] }, '$inc': { __v: 1 } }
Created Index
Mongoose: gh1204.update({ __v: 1, _id: ObjectId("5580d0c44d32b07971dfd281") }) { '$set': { measurements: [] }, '$inc': { __v: 1 } }
/Users/crispensmith/Documents/mongooseTest/node_modules/mongoose/node_modules/mpromise/lib/promise.js:108
if (this.ended && !this.hasRejectListeners()) throw μ΄μ ;
^^
μ΄μ€μ
μ€λ₯: "20" == "25"
EventEmitterμμ
EventEmitterμμ
EventEmitter.emitμμ (events.js:98:17)
Promise.safeEmitμμ (/Users/crispensmith/Documents/mongooseTest/node_modules/mongoose/node_modules/mpromise/lib/promise.js:81:21)
Promise.fulfillμμ (/Users/crispensmith/Documents/mongooseTest/node_modules/mongoose/node_modules/mpromise/lib/promise.js:94:24)
Promise.resolveμμ (/Users/crispensmith/Documents/mongooseTest/node_modules/mongoose/lib/promise.js:113:23)
λͺ¨λΈμμ.
at next_ (/Users/crispensmith/Documents/mongooseTest/node_modules/mongoose/node_modules/hooks-fixed/hooks.js:89:34)
EventEmitter.fnWrapperμμ (/Users/crispensmith/Documents/mongooseTest/node_modules/mongoose/node_modules/hooks-fixed/hooks.js:171:15)
EventEmitterμμ.
EventEmitter.emitμμ (events.js:98:17)
Promise.safeEmitμμ (/Users/crispensmith/Documents/mongooseTest/node_modules/mongoose/node_modules/mpromise/lib/promise.js:81:21)
Promise.fulfillμμ (/Users/crispensmith/Documents/mongooseTest/node_modules/mongoose/node_modules/mpromise/lib/promise.js:94:24)
p1.then.then.self.isNewμμ (/Users/crispensmith/Documents/mongooseTest/node_modules/mongoose/lib/model.js:254:27)
newTickHandlerμμ (/Users/crispensmith/Documents/mongooseTest/node_modules/mongoose/node_modules/mpromise/lib/promise.js:229:18)
process._tickCallbackμμ (node.js:442:13)
(μ£μ‘ν©λλ€. μ΄κ²μ μ μ ν λ§ν¬λ€μ΄μΌλ‘ λ§λλ λ° μκ°μ΄ λ§μ΄ κ±Έλ Έμ΅λλ€. μ΄κ²μ΄ μ κ° ν μ μλ μ΅μ μ
λλ€.)
λ€μμ mongoDB μΆλ ₯μ
λλ€.
> db.gh1204.find();
{ "_id" : ObjectId("5580d0c44d32b07971dfd281"), "sizes" : [ { "name" : "bacon", "_id" : ObjectId("5580d0c44d32b07971dfd282"), "lengths" : [ "25" ] } ], "measurements" : [ ], "__v" : 2 }
CRUD κ΄μ μμ ν΅μ¬μ Create λλ Reads, put Updates μ€ν¨μ λ¬Έμ κ° μλ€λ κ²μ λλ€.
TLDR;
μ μ¬μ© μ¬λ‘μμ μ΄κ²μ μΈ‘μ μ λν΄ κΈΈμ΄ μΈνΈκ° μ μλλ©΄ νΈμ§ν μ μμμ μλ―Έν©λλ€. μ λ νμ λ¬Έμ λ΄μ λ°°μ΄μ΄ νμν λ κ°μ§ μ¬μ© μ¬λ‘κ° μλ ν¨μ
μ맀 νλ‘μ νΈλ₯Ό μ§ν μ€μ
λλ€. 첫 λ²μ§Έ μ¬μ© μ¬λ‘λ λ°λλΌ μ¬μ©μκ° μμ μ νλ‘νμ κ°κ³ μ΄λ₯Ό μ μ§ν μ μμ΄μΌ νλ€λ κ²μ
λλ€. λ λ²μ§Έ μ¬μ© μ¬λ‘λ κ΄λ¦¬μ μν μ΄ λ€μν μ ν μ ν(μλ¨, νλ¨ λ±)μ λν λͺ©λ‘μ λν μ¬μ©μ μ§μ μ°¨νΈλ₯Ό μμ±ν μ μλ€λ κ²μ
λλ€. μΌλ°μ μΌλ‘ κ΄λ¦¬μ νλ‘νμ΄ μ΄λ¬ν 보쑰 μ°¨νΈλ₯Ό νΈμ§ν΄μΌ ν κ²μΌλ‘ μμνμ§λ μμ§λ§ ν΄λΉ μ¬μ© μ¬λ‘μλ μ¬μ ν μμΌλ©΄ μ’μ κ²μ
λλ€.
μ΄λ‘ μ μΌλ‘ νμ¬ κΈ°λ₯μ μ€μ λ‘ λ©μ§(μ°μ°ν) λ³κ²½ν μ μλ κ°μ²΄λ₯Ό μ 곡νμ§λ§ λ¨μν νΈμ§νλ κ²μ΄ μλλΌ λ³κ²½ν μ μλ κ°μ²΄λ‘ μ¬μ©νλ λ° μλ°λλ μμ μ μμ μ¬μνμ§ μμ΅λλ€.
λͺ½κ΅¬μ€ FAQ μ λν 첫 λ²μ§Έ μ§λ¬Έ μ κ³ μ μ μΈ μ¬λ‘ κ° λ¬΄μ μΈμ§ μ μ μμ΅λλ€ . Mongooseλ ES6 νλ‘μ λλ ES7 Object.observe()
μμ΄ λ°°μ΄ μΈλ±μ€λ₯Ό μ§μ μ€μ ν λ λ³κ²½ μ¬νμ μΆμ ν μ μμ΅λλ€. μ¬μ©νλ€
chart.sizes[0].lengths.set(0, "20");
λλ
chart.sizes[0].lengths[0] = '20';
chart.markModified('sizes.0.lengths.0');
μκ² μ΅λλ€. μ΄μνκ²λ(λ΄ κ²μ μ λ΅ λλ¬ΈμΌ μ μμ) μ μ₯λΉ 1xμ© μλνλ κΈ°λ₯λ§ μ°Ύμ μ μμκ³ κ·Έ μ€ μ΄λ κ²λ μ¬μ© μ¬λ‘μ λ§μ§ μμμ κ²μ λλ€.
λ¬Έμ κ° λ¬΄μμΈμ§ μ μ μμ΅λλ€. λͺ½κ΅¬μ€ FAQμ λν 첫 λ²μ§Έ μ§λ¬Έμ μ νμ μΈ μ¬λ‘μ λλ€.
κ°μ¬ν©λλ€. μ κ²½μ°μλ μ΄ λ¬Έμ μμ΅λλ€! :)
model.myArray[index] = anyValue
λλ€
model.myArray.set(index, anyValue)
μ΄κ²μ λν μ μκ² λ¬Έμ μμ΅λλ€. μ΄ μ€λ λλ₯Ό λ 빨리 λ΄€μΌλ©΄ μ’κ² μ΅λλ€!
λͺ½κ΅¬μ€κ° λ³κ²½ μ¬νμ λν μλ¦Όμ λ°λμ§ νμ€νμ§ μμ κ²½μ° λ€μμ μ¬μ©ν μ μμ΅λλ€.
doc.markModified('propChanged')
doc.save() // works
Array.set()μμλ λ΄ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
:+1:
κ°μ μ€λ₯κ° λ°μνμ΅λλ€. μ΄κ²μ λ΄ μ½λ μ€λν«μ
λλ€.
κ·Έλ¦¬κ³ μ΄κ²μ λͺ½κ΅¬μ€ λ‘κ·Έμ
λλ€.
μ΄κ²μ λ΄κ° μ°νΈ λ°°λ¬λΆμκ²μ μ»μ κ²μ
λλ€.
λ¬Έμ κ° μλμ?
++ νΈμ§ ++
λλ λ λμ μ§λ¬Έμ΄ μ³μ κ²μ΄ μλμ§ μκ°ν©λλ€. if (req.body.invite != [])
λΈλ‘μμ λΉλκΈ° μ μ₯μ μνν λ€μ resolve μ½λ°±μμ invited
λ°°μ΄μ μμ ν©λλ€. nRoom.invited.push()
νΈμΆμ νμ λ λ²μ§Έ save() νΈμΆ νμ λ°μν©λλ€. λν req.body.invite != []
λ JSμμ [] == []
κ° falseμ΄κΈ° λλ¬Έμ νμ trueμ
λλ€.
@vkarpov15 νν
@peterkrieg κ°μ¬ν©λλ€!
μλ νμΈμ, κΉμ΄ ν¬ν¨λ λ¬Έμλ₯Ό μ λ°μ΄νΈν λ μ΄ λ¬Έμ κ° λ°μν©λλ€. μ‘°μΈμ΄ μμΌμ κ°μ? λ΄ μ½λλ λ€μ μμΉμ μμ΅λλ€.
https://stackoverflow.com/questions/51426326/updating-deeply-embedded-documents-with-mongodb-2-6-12
@thehme μ΄λ€ λ²μ μ λͺ½κ΅¬μ€λ₯Ό μ¬μ©νκ³ μμ΅λκΉ?
μ΄ μ€μμ {$set: {["dT." + index +".ts." + i + ".th"]: newValue}}
, λκ΄νΈλ λμκ² μ ν©νμ§ μμ λλμ
λλ€. λμ {$set: { "dT." + index +".ts." + i + ".th": newValue } }
λ₯Ό μ¬μ©νλ κ²μ΄ μ°¨μ΄κ° μμ΅λκΉ?
$set λ¬Έμλ λ¬Έμμ΄λ§ νμν©λλ€.
Gitter.im λλ Slack μ κ°μ νμ¬ μ€μκ°μΌλ‘ λνλ₯Ό λλμΈμ π
5.5.11μ μ¬μ©νκ³ μλλ° μ¬μ ν μ΄ λ¬Έμ κ° μμ΅λλ€. λλ μ΄μ΄ μμ΄ μ΄ μ€λ λμμ μ μλ λͺ¨λ μ루μ μ μλνμ΅λλ€. λ΄ λ¬Έμ λ μ΄μμμ λ€μκ³Ό κ°μ΅λλ€.
{
myObj: {
myArr: [{ key: "value" }]
}
}
myDoc.myObj.myArr.push({ key: "value2" });
// debugging myDoc shows new embedded doc
await myDoc.save();
// console shows new embedded doc is gone
νΈμ§: μ΅μ (5.7.6)μΌλ‘ μ κ·Έλ μ΄λνμ§λ§ μ¬μ ν λ¬Έμ κ° μμ΅λλ€.
μλ μ€ν¬λ¦½νΈλ Mongoose 5.7.6μμ μ μλν©λλ€. μ λ¬Έμ λ₯Ό μ΄κ³ λ¬Έμ ν νλ¦Ώμ λ°λ₯΄μΈμ.
const mongoose = require('mongoose');
run().catch(err => console.log(err));
async function run() {
await mongoose.connect('mongodb://localhost:27017/test', {
useNewUrlParser: true,
useUnifiedTopology: true
});
await mongoose.connection.dropDatabase();
const schema = mongoose.Schema({
myObj: { myArr: [{ key: String }] }
});
const Model = mongoose.model('Test', schema);
await Model.create({ myObj: { myArr: [{ key: 'value' }] } });
const myDoc = await Model.findOne();
myDoc.myObj.myArr.push({ key: "value2" });
await myDoc.save();
console.log(myDoc.myObj.myArr);
const saved = await Model.findOne();
console.log(myDoc.myObj.myArr);
}
κ°μ₯ μ μ©ν λκΈ
κ°μ¬ν©λλ€. μ κ²½μ°μλ μ΄ λ¬Έμ μμ΅λλ€! :)
model.myArray[index] = anyValue
λλ€
model.myArray.set(index, anyValue)