Mongodb 在更新查询中使用$not或$ne

Mongodb 在更新查询中使用$not或$ne,mongodb,updates,Mongodb,Updates,我应该在查询中使用$not还是$ne: Mytable.update({ TheThing: Thing, 'UpdatedInfo.NewInfo': {$ne: ThisNewestInfo} }, { $push: { UpdatedInfo: { TheDate: ThisDate, NewInfo: ThisNewestInfo, Past: OriginalInfo } } }, funct

我应该在查询中使用
$not
还是
$ne

Mytable.update({ TheThing: Thing, 
  'UpdatedInfo.NewInfo': {$ne: ThisNewestInfo} }, {
    $push: {
      UpdatedInfo: {
        TheDate: ThisDate,
        NewInfo: ThisNewestInfo,
        Past: OriginalInfo
      }
    }
},
function (err, result) {
  if (err){
    throw new Error(err.message);
  }
}
如果我只想在
ThisNewestInfo
对象元素的
UpdatedInfo
数组中已存在
ThisNewestInfo
时更新文档。试图理解
$not
$ne
之间的区别

而且:
如果文档开头不包含
updateInfo
字段?我应该如何更改上面的更新查询?这意味着如果
updateInfo
不存在,它会添加
updateInfo
,然后,比如第二天,在再次更新文档时检查
此新信息是否不存在。

这实际上取决于您的收藏

在此场景中,$ne和$not之间的主要区别在于,$not执行逻辑析取。也就是说,如果您的文档没有
updateInfo
字段,则使用$not将推送文档,而使用$ne则该文档不会发生任何情况

因此,如果您收集的所有文档都有
updateInfo
字段,那么最好使用$ne

编辑

根据您提到的编辑,文档中可能不存在UpdateInfo。在这种情况下,您应该使用$not$ne将无法更新没有UpdateInfo字段的文档


记住:$not检查key和value是否存在,而$ne只检查value并忽略查询中没有特定key的文档。

这实际上取决于您的集合

在此场景中,$ne和$not之间的主要区别在于,$not执行逻辑析取。也就是说,如果您的文档没有
updateInfo
字段,则使用$not将推送文档,而使用$ne则该文档不会发生任何情况

因此,如果您收集的所有文档都有
updateInfo
字段,那么最好使用$ne

编辑

根据您提到的编辑,文档中可能不存在UpdateInfo。在这种情况下,您应该使用$not$ne将无法更新没有UpdateInfo字段的文档


记住:$not检查key和value是否存在,而$ne只检查value并忽略查询中没有特定key的文档。

但是如果文档开头不包含
updateInfo
字段?这就是上面的更新查询所做的,这意味着如果
updateInfo
不存在,它将添加
updateInfo
,然后,比如说第二天,在再次更新文档时检查
ThisNewestInfo
是否不存在。好的,谢谢,但我是否可以将上面的查询更改为首先考虑
updateInfo
是否不存在,然后如果存在,则仅当
ThisNewestInfo
不存在时才进行更新。但问题是,
updateInfo
在开始时是“存在”的,但没有任何数组元素。是否要通过字段的存在而不是字段的值进行更新?如果
updateInfo
为空,我想第一次向
updateInfo
添加一个对象。如果
updateInfo
中没有此newestinfo
,则以后只更新
updateInfo
。如何进行此类查询?:)$push会在字段不存在的情况下创建一个新字段?但如果文档开头不包含
updateInfo
字段?这就是上面的更新查询所做的,这意味着如果
updateInfo
不存在,它将添加
updateInfo
,然后,比如说第二天,在再次更新文档时检查
ThisNewestInfo
是否不存在。好的,谢谢,但我是否可以将上面的查询更改为首先考虑
updateInfo
是否不存在,然后如果存在,则仅当
ThisNewestInfo
不存在时才进行更新。但问题是,
updateInfo
在开始时是“存在”的,但没有任何数组元素。是否要通过字段的存在而不是字段的值进行更新?如果
updateInfo
为空,我想第一次向
updateInfo
添加一个对象。如果
updateInfo
中没有此newestinfo,则以后只更新
updateInfo
。您应该如何进行这样的查询?:)$push会在字段不存在时创建一个新字段?