【问题标题】:MongoDB - Pushing or Updating an element in ArrayMongoDB - 推送或更新数组中的元素
【发布时间】:2014-07-29 15:49:25
【问题描述】:

在产品集合中,我有一个 recentviews 数组,其中有 2 个字段 viewedByviewedDate

我正在使用$push Array 中的一个新元素,所以我使用以下查询:-

db.produts.update( { _id: 'ObjectId("536c55bf9c8fb24c21000095")' },
                    { $push: { recentviews: [ { viewedby: 'xyz', vieweddate: ISODate("2014-05-09T04:12:47.907Z") } ] } }
            )

上面的查询有什么问题?

进一步如果记录已经存在,例如如果已经存在viewedby 的记录:xyz,我需要更新记录,即vieweddate

【问题讨论】:

    标签: arrays mongodb mongoose


    【解决方案1】:

    你不需要指定括号[]:

    db.produts.update( 
        { _id: ObjectId("536c55bf9c8fb24c21000095") },
        { 
            "$push": { 
                "recentviews": { 
                    "viewedby": "xyz",
                    "vieweddate": ISODate("2014-05-09T04:12:47.907Z")
                } 
            }
        }
    )
    

    因此,当将新的子文档添加到数组时,它只是以这种方式指定并添加到左侧提到的数组中。

    还引用了您的 ObjectId 值,这会阻止 .update() 匹配。

    【讨论】:

    • 效果很好...谢谢....如果记录已经存在,我应该使用什么查询来解决我的进一步问题,我需要update 它而不是pushing 它?任何建议..!
    • @Anup 如果您还有其他问题,请随时发布其他问题。这是解释您正在尝试做什么的最佳方式,如果其他人发现它对他们有用,它甚至可能为您赢得一些声誉
    • @Anup 不要忘记接受你的答案。它让其他人知道您的问题已解决。
    • 这次我确实忘记了.. :)
    【解决方案2】:

    { _id: 'ObjectId("536c55bf9c8fb24c21000095")' } 应该不带引号,因为带引号会被视为字符串而不是 objectId,它不等于您的主键。

    { _id: ObjectId("536c55bf9c8fb24c21000095") }

    x1:PRIMARY> typeof( 'ObjectId("536c55bf9c8fb24c21000095")' )
    string
    x1:PRIMARY> typeof( ObjectId("536c55bf9c8fb24c21000095") )
    object
    

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 2016-01-20
      相关资源
      最近更新 更多