当前位置: 首页 > 知识库问答 >
问题:

在mongoose中使用addtoset命令添加多个相同的文档

喻嘉泽
2023-03-14

我的模式是

var UserQuizSchema = mongoose.Schema({   
        uid:{type:ObjectId,required: true,index:true},
        answer:[{content:String, qid:ObjectId ,time:Date }],        
});

在这个模式中,“uid”代表用户标识符,而“答案”数组存储学生回答的答案。在每个答案中,qid与问题ID相关,“内容”是学生的真实答案,“时间”是答案的修改时间戳。

在这里,我使用mongoose将新答案插入到数组中

function updateAnswer(uid,question_id,answer,callback){

    var options = { new: false };   
    var quiz_id = mongoose.Types.ObjectId(quiz_id);
    var qid = mongoose.Types.ObjectId(question_id);
    UserQuizModel.findOneAndUpdate({'uid':uid},{'$addToSet':{'answer':{'qid':qid, 'content':answer} } },options,function(err,ref){
        if(err) {
            console.log('update '.red,err);
            callback(err, null);
        }else{
            console.log('update '.green+ref);                 
            callback(null,ref);
        }
    })
} 

一般来说,通过使用addToSet命令,应答数组中的元素应该是唯一的,但在我的示例中,应答数组只能有多个相同的嵌入文档,除了每个嵌入文档都有一个唯一的OjbectId\u id

如如

 answer:
  [ { qid: 5175aecf0e5b061414000001, _id: 518a5e5895fc9ddc1e000003 },
    { qid: 5175aecf0e5b061414000001, _id: 518a5e5f95fc9ddc1e000004 } ] }

您可以看到两个嵌入式文档的qid是相同的,但_id是不同的。

为什么会有一个额外的_id,我不把它放在模式设计中??

共有1个答案

尉迟清野
2023-03-14

通过为\u id选项设置为false的元素显式定义架构,可以禁用嵌入对象中的\u id

var UserQuizSchema = mongoose.Schema({   
    uid:{type:ObjectId,required: true,index:true},
    answer:[new Schema({content:String, qid:ObjectId, time:Date}, {_id:false})]
});
 类似资料:
  • 我有以下问题: 我试图用JDA实现一个不和谐斜杠命令,可以这样输入: 或者像这样: 但是您应该被要求使用其中一个选项。 我现在有一个 这是我当前的代码:

  • 问题内容: 我试图弄清楚如何使用argparser执行以下操作: 本身是一个子命令。我的目标是使脚本具有链接一系列子命令(成为其中一个命令)并按顺序执行它们的能力。在上面的示例中,它将执行构建,然后设置环境,然后再次执行构建。如何使用argparse完成此操作?我尝试了以下方法: 但是,似乎每次执行此操作时,它都会进入子命令并报告它不知道是什么。我尝试解析额外的内容,以便可以执行重复调用/链,但是

  • 问题内容: 我想在两种模式之间添加一些大代码: File1.txt infile.txt 我想在 第一 和 第二 之间添加 File1.txt 内容: 所需输出: 我可以使用sed命令使用两种模式进行搜索,但是我不知道如何在它们之间添加内容。 问题答案: 由于代表 读取文件 ,请使用: 您可以在此处找到一些信息:使用’r’命令读取文件。 为就地版本添加(即)。 要执行此操作,无论字符大小写如何,均

  • 问题内容: 我有一个特殊情况,我们的收藏需要根据电子邮件地址和swepstakes_id的组合来确保每个文档都是唯一的。我已经看了很多遍,但是我找不到如何完成这种验证的方法。 模式定义: 问题答案: 您可以使用包含两个字段的唯一索引来强制执行该操作:

  • 问题内容: 我正在运行Ubuntu,并希望通过包含多个jar文件从终端执行Java文件。 我的所有罐子都放在tha jar文件夹中。 我试过了 我得到以下错误。 谁能指导如何在classpath中使用多个jar? 问题答案: 从类路径中删除空格并添加当前路径 从Java 6开始,您可以使用类路径通配符

  • 问题内容: 目前,我使用保存添加单个文档。假设我有一组文档希望存储为单个对象。有没有一种方法可以通过单个函数调用将它们全部添加,然后在完成后获得单个回调?我可以单独添加所有文档,但是管理回调以解决所有问题。 问题答案: 猫鼬尚未实现大容量插入(请参阅问题#723)。 由于您知道要保存的文档数量,因此可以编写如下内容: 当然,这是一个权宜之计,我建议您使用某种流控制库(我使用q很棒)。