【发布时间】:2015-02-10 09:37:34
【问题描述】:
对 mongodb 2.6 使用 mongoose - 另一个问题与我的类似;
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/
我有什么遗漏吗?
谢谢。
J
【问题讨论】:
-
我测试了两个更新查询。他们俩都只添加了一项。
-
这是确切的代码,还是显示问题的示例?如果您的对象比问题中的示例更复杂,请从文档中记住这一点。 如果数组中的现有文档与要添加的文档完全匹配,则MongoDB确定该文档是重复的;即现有文档具有完全相同的字段和值,并且字段的顺序相同。
-
只有架构像这样的invite_list: [{type: String, trim: true}],它才能按预期工作。我错过了什么吗?
标签: node.js mongodb testing mongoose database