Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Meteor Mongo更新($set对象;$push数组)_Mongodb_Meteor_Mongodb Query - Fatal编程技术网

Mongodb Meteor Mongo更新($set对象;$push数组)

Mongodb Meteor Mongo更新($set对象;$push数组),mongodb,meteor,mongodb-query,Mongodb,Meteor,Mongodb Query,你好 我很难弄清楚为什么我的mongo没有更新。未更新对象和数组。我已经 我尝试了很多方法。除了下面的代码之外,我还尝试过让文档中已经有了密钥(但是是空的,所以 数组将是keyName:{},以及不在文档中的键)。我也试着把键放在引号里,等等。 我已经获取了更新的控制台输出并粘贴到Robo3T中,运行了查询,它很好地更新了文档 流星1.6 mongo 3.2.15 服务器代码正在运行 const dbQuery = {owner: uid.user_id, paymentToken: uid

你好

我很难弄清楚为什么我的mongo没有更新。未更新对象和数组。我已经 我尝试了很多方法。除了下面的代码之外,我还尝试过让文档中已经有了密钥(但是是空的,所以 数组将是
keyName:{}
,以及不在文档中的键)。我也试着把键放在引号里,等等。 我已经获取了更新的控制台输出并粘贴到Robo3T中,运行了查询,它很好地更新了文档

流星1.6
mongo 3.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:'', rel:‘self’, 方法:'GET'}}

这也适用于Robo3T

我正在使用
siml模式

[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
请参见

我认为在您的模式中,您需要
blackbox:true
来查看
ppOwnerInfo
。对于
agreementDetails
也可能看到这正是问题所在。我从未注意到@aldeed添加到v2中的更改。我真的希望能像其他顶级模式元素一样抛出一个错误(类型:String)。Michel Floyd,如果你回答这个问题,我会选择它。我同意-定义一个既没有自己的子模式也没有黑盒集的对象应该在编译时出错。