我有一个文件:
活动 -> 活动 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 推送到活动数组中。为什么?