-->

麻烦更新与MongoDB的特定子文档(Trouble updating a specific sub

2019-10-19 05:10发布

我的文件是这样的:

{
  _id: ObjectId("52d317d7b5c4960000587cd4"),
  txid: "7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c",
  vin: [
    {
      _id: ObjectId("52d317d7b5c4960000587ce9"),
      meta_address: "321",
      meta_amount: 50,
      sequence: 4294967295,
      txid: "6749762ae220c10705556799dcec9bb6a54a7b881eb4b961323a3363b00db518",
      vout: 0
    },
    {
      _id: ObjectId("52d317d7b5c4960000587ce8"),
      sequence: 4294967295,
      txid: "c04c413576307737f3ad48efe5d509ebc883e1d04822b3a2eccf6a80a4482932",
      vout: 0
    },
    {
      txid: "72d4fc43ac576a4b2f1f35e1b310a2d83a1012a36fdc7813ec237646950233cf",
      vout: 0,
      sequence: 4294967295,
      _id: ObjectId("52d317d7b5c4960000587ce7")
    }
  ]
}

我的查询是{ txid: '7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c', 'vin.txid': 'c04c413576307737f3ad48efe5d509ebc883e1d04822b3a2eccf6a80a4482932', 'vin.vout': 0 }

而更新:

{ 'vin.$.meta_address': '321',
  'vin.$.meta_amount': 50 }

但是,当我运行它,它更新的第一项vin阵列,而不是第二。 现在,奇怪的是,如果我改变了查询: { txid: '7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c', 'vin.txid': 'c04c413576307737f3ad48efe5d509ebc883e1d04822b3a2eccf6a80a4482932'}

然后正常工作。 我认为这个问题是我的查询会在2元vin ,但我需要双方进行搜索。 我究竟做错了什么?

Answer 1:

为了让$在您的更新,以确定这两个特性在您的查询相匹配的元素,你需要使用$elemMatch在查询对象:

{ txid: '7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c', 
  vin: {$elemMatch: {
      txid: 'c04c413576307737f3ad48efe5d509ebc883e1d04822b3a2eccf6a80a4482932', 
      vout: 0 
  }}}


文章来源: Trouble updating a specific subdocument with MongoDB