- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 mongodb
中有以下集合结构.说
集合 - 学生 - _id,firstname,lastname,class
现在我想插入 2 个额外的列,比如 marks
作为array
{mark1:m1,mark2:m2} when inserting a new
行`。
我按照下面的方式做了,但它插入了不包括 marks
的记录值(value)观。
var student=new Student({
_id:id,
firstname:result.fname,
lastname:result.lname,
class:result.class,
marks:{
mark1:result.mark.m1,
mark2:result.mark.m2
}
})
这在 Mongoose 中可能吗?
我遇到了 $setOnInsert
,但不确定这是否适合这里?
因此,如果适合,是否有任何等效的解决方法可以使用 MongoDb
的 $setOnInsert
?如果不是,我可以使用什么方法?
最佳答案
是的,这是可能的,但这取决于定义模式时设置的选项。您不一定需要使用 $setOnInsert
运算符在插入新记录时, save()
模型上的方法就足够了。
strict
选项确保添加到模型实例但未在模式中指定的值被保存或不保存到数据库中。
例如,如果您这样定义架构:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var studentSchema = new Schema({
firstname: String,
lastname: String,
class: String
})
var Student = mongoose.model('Student', studentSchema);
var student= new Student({
_id: id,
firstname: result.fname,
lastname: result.lname,
class: result.class,
marks: {
mark1: result.mark.m1,
mark2: result.mark.m2
}
});
student.save(); // marks is not saved to the db
但是如果你设置 strict
选项为 false:
var studentSchema = new Schema({..}, { strict: false });
var student= new Student({
_id: id,
firstname: result.fname,
lastname: result.lname,
class: result.class,
marks: {
mark1: result.mark.m1,
mark2: result.mark.m2
}
});
student.save(); // marks is now saved to the db!!
注意:为了向后兼容,mongoose v2 中的 strict 选项默认设置为 false。将其设置为 true 并安然休眠。除非你有充分的理由,否则不要设置为 false。
关于node.js - Mongoose 中 $setOnInsert 的等效解决方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35355387/
如果文档不存在,我想添加一个文档,否则将一个元素添加到其中一个子文档中。 db.test.update( { name : 'Peter' }, $setOnInsert : {
我正在尝试在统计信息中查找用户,如果它们不存在,请创建它们并向我提供信息。 启动已执行,但我在其他 console.logs 或响应上没有收到任何响应。 我怎样才能解决这个问题? console.lo
我已经使用 $setOnInsert 更新了 mongoDB。它在 2.4 版本的 mongoDB 中工作,但在 2.6 版本 中抛出错误。 代码如下 BasicDBObject update
我正在尝试进行批量更新,同时保留特定字段的状态。在我的代码中,我要么创建一个文档,要么添加到列表“东西”。 #init bulk data = [...] bulkop = col.initializ
在 this发布后,接受的答案解释说,在 upsert 操作中,您不能在 $set 和 $setOnInsert 下拥有相同的字段。 有人可以解释这是为什么吗? $setOnInsert 似乎不应该与
我在 mongodb 中有以下集合结构.说 集合 - 学生 - _id,firstname,lastname,class 现在我想插入 2 个额外的列,比如 marks作为array {mark1:m
我搜索了 SO 并抓取了 Mongoose/Mongo 文档但无济于事,因此我的问题。 我想$inc一个位于嵌套数组中的对象中的值,或者创建$setOnInsert这个对象,如果它还不存在的话。 我的
我了解您无法在现有 mongodb 文档上更新 _id 的事实。 但是有没有理由我们不能在“setOnInsert”部分的 upsert 中使用它?因为它是“插入时”,所以它不是更新。 我的预期用法是
我有以下查询,在没有 $max 和 $min 的情况下工作正常,但是,当 $max 和 $min 包含什么都没有发生? Summary.update({ productId: _product._
我正在尝试在 mongodb 中实现一个'server-side counter-versioned' 项并尝试执行以下操作/* 使用 Java API */ Document dbDoc = dbC
我正在尝试更新 mongodb 中的集合,如果字段存在,将插入它。我不太确定如何使用 upsert 选项做到这一点。 MongoCollection docs = mongoDb.getCollect
如何在 Upsert 上使用 $setOnInsert 以及 Go MongoDB 驱动程序的任何 mgo 变体? 最佳答案 给定任意类型Foo: type Foo struct { ID
我有一个带有 timestamps: true 参数的模式。我想插入文档,但前提是它们尚不存在。如果它们确实存在,则不应发生任何操作 (noop)。 所以我使用 $setOnInsert 参数如下 r
我正在尝试扫描文件系统中的文件 - 如果文件位于数据库中,则更新。如果没有则插入一条新记录。但我收到此错误“TypeError update() 获得了参数 'upsert' 的多个值” 我在这里做错
我是一名优秀的程序员,十分优秀!