Mongodb find_and_update $ ne问题

时间:2013-08-11 19:22:54

标签: mongodb

我有一份文件:

有效 - >活动ID的数组

new_active - >带有一些细节的活动ID数组

现在,我想为活动添加一个新ID,但前提是它不存在于new_active中。 我不想改变我的架构,我宁愿理解为什么第一个版本的代码工作得很好,而第二个版本却没有。

在第一个代码中,我使用了有源和放大器的数组。 new_active,这很好用:

a = MongoMapper.database.collection(:papers).find_and_modify(
        :query => {
          :active => {
            '$nin' => [paper_id]
          },
          :new_active =>  {'$ne' => [paper_id]} #I know, $nin can also be used
        },
        :update => {
          '$push' =>{
            :active => paper_id,
          }
        },
        :upsert => false,
        :new => true

如果两个数组中不存在ID,则此代码可以正常工作并将ID推送到活动状态。 现在,我想在new_active中有一系列哈希/ dicts。这是问题发生的时候。 使用$ne代替$nin的原因是$ne应该返回一个结果,即字段没有特定值或该字段不存在。在这种情况下,paper_id中的new_active字段不存在:

a = MongoMapper.database.collection(:papers).find_and_modify(
        :query => {
          :active => {
            '$nin' => [paper_id]
          },
          :new_active => {
            :paper_id => {'$ne' => [paper_id]}
          }
        },
        :update => {
          '$push' =>{
            :active => paper_id,
          }
        },
        :upsert => false,
        :new => true

此代码不会将paper_id推送到活动数组中。为什么呢?

1 个答案:

答案 0 :(得分:1)

条件{'$nin' => [paper_id]}相当于{'$ne' => paper_id},而不是{'$ne' => [paper_id]}