2
동일한 컬렉션 내에 여러 일치가있을 수있는 Mongo 컬렉션 내의 여러 하위 문서를 업데이트하려고합니다. 아쉽게도 각 문서 내의 첫 번째 하위 문서 만 일치하는 업데이트하고 있습니다. 나는 그것을 실행할 때, 나는 다음과 같은 결과를 얻을 그리고Mongo 하위 문서 배열의 다중 하위 업데이트
var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1/touchbits');
var PartsSchema = new mongoose.Schema({
type: String
, partNbr: Number
});
var ProductSchema = new mongoose.Schema({
sku: { type: String, unique: true }
, parts: [PartsSchema]
});
Product = mongoose.model('Product', ProductSchema);
var cigars = new Product({
sku: 'cigar123',
parts: [{type: 'tobacco', partNbr: 4},
{type: 'rolling paper', partNbr: 8},
{type: 'tobacco', partNbr: 4}]
});
var cigarillo = new Product({
sku: 'cigarillo456',
parts: [{type: 'tobacco', partNbr: 4},
{type: 'crush paper', partNbr: 12}]
});
cigars.save(function(err, product1) {
if(err) { console.log("err1: " + err); return err; }
console.log("saved: " + product1);
cigarillo.save(function(err, product2) {
if(err){ console.log("err2: " + err); return err; }
console.log("saved: " + product2);
Product.update({ "parts.type": 'tobacco' },
{ $set: { "parts.$.partNbr": 5 } },
{ multi: true },
function(err, numAffected) {
if (err) { console.log("err3: " + err); return err; }
console.log("records updated: " + numAffected);
Product.find({}, function(err, docs) {
if (err) { console.log("err4: " + err); return err; }
console.log("updated data: " + docs);
Product.remove(function(err) {
if (err) { console.log("err5: " + err); return err; }
process.exit();
});
});
});
});
});
: 여기
코드입니다saved: { __v: 0,
sku: 'cigar123',
_id: 51c9229b7fe80ef71e000002,
parts:
[ { type: 'tobacco', partNbr: 4, _id: 51c9229b7fe80ef71e000005 },
{ type: 'rolling paper',
partNbr: 8,
_id: 51c9229b7fe80ef71e000004 },
{ type: 'tobacco', partNbr: 4, _id: 51c9229b7fe80ef71e000003 } ] }
saved: { __v: 0,
sku: 'cigarillo456',
_id: 51c9229b7fe80ef71e000006,
parts:
[ { type: 'tobacco', partNbr: 4, _id: 51c9229b7fe80ef71e000008 },
{ type: 'crush paper',
partNbr: 12,
_id: 51c9229b7fe80ef71e000007 } ] }
records updated: 2
updated data: { sku: 'cigar123',
_id: 51c9229b7fe80ef71e000002,
__v: 0,
parts:
[ { type: 'tobacco', partNbr: 5, _id: 51c9229b7fe80ef71e000005 },
{ type: 'rolling paper',
partNbr: 8,
_id: 51c9229b7fe80ef71e000004 },
{ type: 'tobacco', partNbr: 4, _id: 51c9229b7fe80ef71e000003 } ] },{ sku: 'cigarillo456',
_id: 51c9229b7fe80ef71e000006,
__v: 0,
parts:
[ { type: 'tobacco', partNbr: 5, _id: 51c9229b7fe80ef71e000008 },
{ type: 'crush paper',
partNbr: 12,
_id: 51c9229b7fe80ef71e000007 } ] }
공지 사항이 여전히 '시가'문서에서 두 번째로 '담배'기록 PartNbr 4 대신 5 있습니다. 누군가가 쿼리 조건과 일치하는 배열 내의 모든 하위 업데이트하려면 업데이트를 변경하는 방법을 알고 있습니까?
링크를 제공해 주셔서 감사합니다. 더 이상 레코드가 업데이트되지 않을 때까지 IYO가 문서를 계속 업데이트하는 가장 좋은 해결 방법입니까? – frank
스키마 구조를 변경할 수 없거나 Mongo에서 전체 문서를 가져 와서 앱에서 업데이트하고 다시 푸시하고 싶지 않은 경우; 그러면 효과가 있습니다. – daveh