0

我有一个文件:

活动 -> 活动 ID 的数组

new_active -> 包含一些细节的活动 ID 数组

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

在第一个代码中,我对 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 推送到活动中。现在,我想在 new_active 中有一个哈希/字典数组。这就是问题发生的时候。$ne使用instead of的原因$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 推送到活动数组中。为什么?

4

1 回答 1

1

条件{'$nin' => [paper_id]}等价于{'$ne' => paper_id},不是{'$ne' => [paper_id]}

于 2013-09-27T01:09:00.243 回答