我有一份文件:
有效 - >活动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推送到活动数组中。为什么呢?
答案 0 :(得分:1)
条件{'$nin' => [paper_id]}
相当于{'$ne' => paper_id}
,而不是{'$ne' => [paper_id]}
。