mongodb - 推送到 MongooseJS 子文档而不创建重复项

标签 mongodb mongoose

我有一个用于 Lists 的 MongooseJS 架构,其中每个列表都包含一个 ListItems 数组。每个 ListItem 只是对 Item 的引用和 isSelected 的标志。像这样:

const ListItemSchema = new mongoose.Schema({
  item: { type:mongoose.Schema.Types.ObjectId, ref:'Item' },
  isSelected: Boolean,
});

const ListSchema = new mongoose.Schema({
  name: String,
  items: [ListItemSchema],
});

我只需使用 $push 即可将 Item 推送到 List 中。

List.findOneAndUpdate(
    {_id:listId}, 
    {
       $push: {
         items: {item:itemId, isSelected:false}
       }
    }
);

这有效,但它允许我将相同的 Item 多次推送到 List 上。

在检查重复项时,在这种结构中添加 Items 的最佳方法是什么?

最佳答案

使用 $ne 避免重复

List.findOneAndUpdate( {_id:listId},{items.item: {$ne: itemId}} { $push: { items: {item:itemId, isSelected:false} } });

      `

关于mongodb - 推送到 MongooseJS 子文档而不创建重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39522749/

相关文章:

node.js - 覆盖 Mongoose 模型方法

node.js - Mongoose 引用被覆盖

javascript - 使用数组映射删除对象属性

javascript - NodeJS Html-pdf : fs. readfilesync 如何异步/等待

java - MongoDB:检查与数据库的连接

python - 使用 pymongo 3.0 从 mongo 聚合中获取结果

MongoDB数据库加密

javascript - Mongo/Mongoose快速更新导致数据丢失

mongodb - 在 MongoDB 中,如何使用文档中的字段作为 $geoWithin/$centerSphere 表达式的输入?

java - Spring Data MongoDB 对多个字段进行排序