流星 Mongo 更新($set object; $push array)
Meteor Mongo update ($set object; $push array)
美好的一天。
我很难弄清楚为什么我的 mongo 没有更新。对象和数组未更新。我有
一直在尝试很多途径。除了下面的代码外,我还尝试过在文档中使用密钥(但为空,所以
该数组将是 keyName:{}
,以及不在文档中的键)。我也试过将键放在引号等中。
我已经将更新的控制台输出粘贴到 Robo3T 和 运行 查询中,它更新了文档就好了。
流星1.6
mongo3.2.15
服务器代码运行
const dbQuery = {owner: uid.user_id, paymentToken: uid.paymtToken}
exFile = {
$set: {
agreement_id: responseData.id, // string
selfUrl: responseData.links[0].href, // string
agreementDetails: responseData.agreement_details, // object
membershipLevel: 'premium', // string
ppOwnerInfo: responseData.payer, // object
},
};
let subsReturn = MonthlySubs.update(dbQuery, exFile, {multi:false, upsert:false} );
console.log('subsReturn: ', subsReturn); // outputs: 1
这将导致文档更新为除对象之外的所有内容。我知道 exFile
是有效的:
console.dir(exFile, {depth: null});
结果:
{ '$set':
{ agreement_id: 'I-SW0AL8YJS',
selfUrl: 'https://api.sandbox.paypal.com/v1/payments/billing-agreements/I-SW0AL',
agreementDetails:
{ outstanding_balance: { value: '0.00' },
cycles_remaining: '1',
cycles_completed: '0',
next_billing_date: '2018-05-05T10:00:00Z',
final_payment_date: '1970-01-01T00:00:00Z',
failed_payment_count: '0' },
membershipLevel: 'premium',
ppOwnerInfo:
{ payment_method: 'paypal',
status: 'verified',
payer_info:
{ email: 'paypal-buyer@tion.com',
first_name: 'test',
last_name: 'buyer',
payer_id: '99CEFGB6L',
shipping_address:
{ recipient_name: 'test buyer',
line1: '1 Main St',
city: 'San Jose',
state: 'CA',
postal_code: '95131',
country_code: 'US' } } } } }
更新数组也有问题。
let pushFile = {
$push: {
links: {href: responseData.links[0].href, rel: 'self', method: 'GET', }
}
};
console.dir(pushFile, {depth: null});
subsReturn = MonthlySubs.update(dbQuery, pushFile, {multi:false, upsert:false} );
console.log('subsReturn: ', subsReturn); // outputs: 1
控制台输出的 pushFile
内容如下:
{ '$push':
{ 链接:
{ href: 'https://api.sandbox.paypal.com/v1/payments/billing-agreements/I-S45A17AV',
相对:'self',
方法:'GET' } } }
这在 Robo3T 中也很有效。
我正在使用 simpl-schema
:
[snip]
selfUrl: {
type: String,
label: 'Link for details about subscription on Paypal.',
optional: true,
},
ppOwnerInfo: {
type: Object,
label: 'Subscriber name, address, etc. from Paypal. Populates after subscription executed. (payer)',
optional: true,
},
links: {
type: Array,
label: 'Holds various Paypal endpoints. Optional because not all inserts/updates have these.',
optional: true,
},
[/snip]
在您的架构中,您需要为 ppOwnerInfo
设置 blackbox: true
。 agreementDetails
也可能参见 docs
美好的一天。
我很难弄清楚为什么我的 mongo 没有更新。对象和数组未更新。我有
一直在尝试很多途径。除了下面的代码外,我还尝试过在文档中使用密钥(但为空,所以
该数组将是 keyName:{}
,以及不在文档中的键)。我也试过将键放在引号等中。
我已经将更新的控制台输出粘贴到 Robo3T 和 运行 查询中,它更新了文档就好了。
流星1.6
mongo3.2.15
服务器代码运行
const dbQuery = {owner: uid.user_id, paymentToken: uid.paymtToken}
exFile = {
$set: {
agreement_id: responseData.id, // string
selfUrl: responseData.links[0].href, // string
agreementDetails: responseData.agreement_details, // object
membershipLevel: 'premium', // string
ppOwnerInfo: responseData.payer, // object
},
};
let subsReturn = MonthlySubs.update(dbQuery, exFile, {multi:false, upsert:false} );
console.log('subsReturn: ', subsReturn); // outputs: 1
这将导致文档更新为除对象之外的所有内容。我知道 exFile
是有效的:
console.dir(exFile, {depth: null});
结果:
{ '$set':
{ agreement_id: 'I-SW0AL8YJS',
selfUrl: 'https://api.sandbox.paypal.com/v1/payments/billing-agreements/I-SW0AL',
agreementDetails:
{ outstanding_balance: { value: '0.00' },
cycles_remaining: '1',
cycles_completed: '0',
next_billing_date: '2018-05-05T10:00:00Z',
final_payment_date: '1970-01-01T00:00:00Z',
failed_payment_count: '0' },
membershipLevel: 'premium',
ppOwnerInfo:
{ payment_method: 'paypal',
status: 'verified',
payer_info:
{ email: 'paypal-buyer@tion.com',
first_name: 'test',
last_name: 'buyer',
payer_id: '99CEFGB6L',
shipping_address:
{ recipient_name: 'test buyer',
line1: '1 Main St',
city: 'San Jose',
state: 'CA',
postal_code: '95131',
country_code: 'US' } } } } }
更新数组也有问题。
let pushFile = {
$push: {
links: {href: responseData.links[0].href, rel: 'self', method: 'GET', }
}
};
console.dir(pushFile, {depth: null});
subsReturn = MonthlySubs.update(dbQuery, pushFile, {multi:false, upsert:false} );
console.log('subsReturn: ', subsReturn); // outputs: 1
控制台输出的 pushFile
内容如下:
{ '$push': { 链接: { href: 'https://api.sandbox.paypal.com/v1/payments/billing-agreements/I-S45A17AV', 相对:'self', 方法:'GET' } } }
这在 Robo3T 中也很有效。
我正在使用 simpl-schema
:
[snip]
selfUrl: {
type: String,
label: 'Link for details about subscription on Paypal.',
optional: true,
},
ppOwnerInfo: {
type: Object,
label: 'Subscriber name, address, etc. from Paypal. Populates after subscription executed. (payer)',
optional: true,
},
links: {
type: Array,
label: 'Holds various Paypal endpoints. Optional because not all inserts/updates have these.',
optional: true,
},
[/snip]
在您的架构中,您需要为 ppOwnerInfo
设置 blackbox: true
。 agreementDetails
也可能参见 docs