如果对象字段在MondoDB / Mongoose中是唯一的,则将对象添加到数组中

时间:2017-03-26 08:38:14

标签: node.js mongodb mongoose

这是我的架构:

let userSchema = new Schema({
    email: { type: String, required: true },
    password: { type: String, required: true },
    books: [{ cover: String, title: String, link: String }],
});

我正在将一个对象推送到books数组,只有该对象尚不存在。我不明白为什么这不起作用:我说找到用户,检查books数组以确保标题不存在将新对象添加到books数组。但是重复数据仍会显示在我的数组中。

注意:查询正在一个函数内执行,该函数传递modeluser,并且包含一个名为info的图书数据的对象,因此info.title

model.findOneAndUpdate(
    { email: user.email, 'books.title': { $ne: 'info.title  ' } },
    { $addToSet: { "books": { title: info.title, cover: 
    info.cover, link: info.link } } },
    { new: true },
    (err, user) => {
        if (err) throw err;
        console.log(user);
        }
    )

欣赏方向

1 个答案:

答案 0 :(得分:2)

来自MongoDB $ addToSet文档https://docs.mongodb.com/manual/reference/operator/update/addToSet/#behavior

  

如果值是文档,MongoDB确定文档是a   如果数组中的现有文档与要添加的文档匹配,则重复   文件准确;即现有文件具有完全相同的字段   和值和字段的顺序相同。因此,字段顺序   很重要,你不能指定MongoDB只比较一个子集   文档中的字段以确定文档是否为   复制现有的数组元素。

您也可以在MongoDB - $addToSet on a list of Embedded Document

找到一个好的答案