Mongodb使用addtoSet来确保没有重复项

时间:2014-12-11 19:20:24

标签: node.js mongodb testing mongoose database

使用mongoose对抗mongodb 2.6 - 另一个问题是听起来与我的相似;

https://github.com/LearnBoost/mongoose/issues/1677

我有这段代码:

$addToSet: { 
  invite_list: { 
    $each : [ 
      { email: 'test@test.com' }, 
      { email: 'test@test.com' }, 
      { email: 'test@test.com' },
      { email: 'test@test.com' }] 
  }
}

应该只存储一个项目,而是存储4个项目!

但是,将查询更改为此

$addToSet: {
  invite_list: { 
    $each : [
      'test@test.com', 
      'test@test.com', 
      'test@test.com', 
      'test@test.com' ]
  }
}

按预期返回一个项目。

模型架构字段:

invite_list: [{email: {type: String, trim: true}}],

查询看起来像这样;

UserModel.findOneAndUpdate(
        {
            _id: req.params.id,
        },
        {
            $addToSet: {invite_list: { $each : [{ email: 'test@test.com' },
                { email: 'test@test.com' },
                { email: 'test@test.com' },
                { email: 'test@test.com' }] }}
        }, function (err, user) {
            // morel logic here...        
            return res.status(200).json(user);
        });

http://docs.mongodb.org/manual/reference/operator/update/addToSet/

是否有遗漏的东西。

感谢。

Ĵ

1 个答案:

答案 0 :(得分:3)

读完之后,它让我思考;

Stop Mongoose from creating _id property for sub-document array items

找到修复程序;

模型现在看起来像这样;

 var subSchema = new mongoose.Schema({email: {type: String, trim: true, _id: false}},{ _id : false })

invite_list: [subSchema], 

按预期工作......

Ĵ