- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下更新查询
,它会删除对象
的内容,但它会留下空
。我想删除整个对象{}
。
我怎样才能做到这一点?我也尝试过为 properties
指定 value
而不是 booleans
,这给了我相同的结果
。
如果我执行此操作 { $unset: { "courses.1.teachers.1": 1 }
,则会返回 null
而不是 {}
。所以它们都不是最佳的。
student.updateStudent = (fcallback) => {
var studentObjectId = global.mongoId("5a019896f89c24926108e2bf")
global.db.collection('students').updateOne({ "_id": studentObjectId }, { $unset: { "courses.1.teachers.1.firstName": 1, "courses.1.teachers.1.lastName": 1 } }, (err, result) => {
if (err) {
var jError = { "status": "error", "message": "ERROR -> user.js -> 001" }
console.log(jError)
return fcallback(true, jError)
}
var jOk = { "status": "ok", "message": "user.js -> deleted -> 000" }
console.log(jOk)
console.log(JSON.stringify(result))
return fcallback(false, jOk)
})
}
这是留下空对象的结果:
{
"_id" : ObjectId("5a019896f89c24926108e2bf"),
"firstName" : "Sarah",
"lastName" : "Jepsen",
"age" : 27,
"courses" : [
{
"courseName" : "Web-development",
"teachers" : [
{
"firstName" : "Santiago",
"lastName" : "Donoso"
}
]
},
{
"courseName" : "Databases",
"teachers" : [
{
"firstName" : "Dany",
"lastName" : "Kallas"
},
{} //see here
]
},
{
"teachers" : [
{
"firstName" : "Roxana",
"lastName" : "Stolniceanu"
}
]
}
]
}
我想要的是这样的:
{
"_id" : ObjectId("5a019896f89c24926108e2bf"),
"firstName" : "Sarah",
"lastName" : "Jepsen",
"age" : 27,
"courses" : [
{
"courseName" : "Web-development",
"teachers" : [
{
"firstName" : "Santiago",
"lastName" : "Donoso"
}
]
},
{
"courseName" : "Databases",
"teachers" : [
{
"firstName" : "Dany",
"lastName" : "Kallas"
}
]
},
{
"teachers" : [
{
"firstName" : "Roxana",
"lastName" : "Stolniceanu"
}
]
}
]
}
最佳答案
根据$unset
docs ,这是所需的行为:
When used with $ to match an array element, $unset replaces the matching element with null rather than removing the matching element from the array. This behavior keeps consistent the array size and element positions.
所以您使用了错误的工具来完成这项工作。
正确的工具:
文档示例:
{
"_id" : ObjectId("5a019896f89c24926108e2bf"),
"firstName" : "Sarah",
"lastName" : "Jepsen",
"age" : 27,
"courses" : [
{
"courseName" : "Web-development",
"teachers" : [
{
"firstName" : "Santiago",
"lastName" : "Donoso"
}
]
},
{
"courseName" : "Databases",
"teachers" : [
{
"firstName" : "Dany",
"lastName" : "Kallas"
},
{
"firstName": "Code",
"lastName": "Dragon"
}
]
},
{
"teachers" : [
{
"firstName" : "Roxana",
"lastName" : "Stolniceanu"
}
]
}
]
}
示例 1:$pop
:
global.db
.collection('students')
.updateOne(
{ _id : studentObjectId },
{ $pop: { "courses.1.teachers": 1 } } // 1 for last item, -1 for the first
)
示例 2:$pull
:
global.db
.collection('students')
.updateOne(
{ _id : studentObjectId },
{ $pull: { "courses.1.teachers": { firstName: 'Code' } } }
)
关于node.js - 如何在 MongoDB 中 $unset 整个对象而不是将其保留为空或 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47159058/
mongodb 3.0.1版 Mongoose 版本 4.0.3 我正在尝试这样做: groupsModel.updateQ({_id:group._id},{ $unset:{"modera
我有一个类型为 = LoadBalancer 的服务,当我执行 kubectl describe services servicename , 我得到这个输出: Name: ser
看这段代码: http://codepad.org/s8XnQJPN function getvalues($delete = false) { static $x; if($delete
尝试持久保存来自Storm-hive客户端的Hive表,在HiveMetastoreServer日志中获取以下日志。 020-02-26 23:20:27,748 ERROR org.apache.t
对于我的项目,我需要一个可编辑的文本,所以我决定使用一些插件,但我也是 jQuery 新手,并决定创建我自己的可编辑标签 [内联编辑]。 这是我的代码: 当用户单击类 editable 的元素时 $(
我正在我的 raspberry pi 主目录中编辑我的 .bashrc,现在终端提示卡住如下: [pi@hostname ~]$ unset 我无法从提示中删除 unset。我做了什么,我该如何解决这
我有一个数组,我想从中取消设置第一项,但是当我这样做时,我将信息作为 JSON 发送,结果作为对象读取。 PHP 数组如下所示: $myArray = ["one", "two", "three",
我有一个类 Foo,它有一个名为 bar 的 json 字符串属性:[PHP Fiddle Link] bar); } public function remove($timestam
我无法理解为什么即使我创建了副本,PHP 也无法为两个 对象取消设置我的children 属性。 当我分配 $singleNode = $node 时,它不应该删除 singleNode 子节点,因为
我无法解释 unset 的以下行为: #!/bin/bash my_unset() { unset "$@"; } fn1() { local var; unset var; var=1; }
这是我的代码: return ApiResponse::Json(200, '', ['categories' => $categories], 200); 这是结果的屏幕截图: 现在,我需要取消设置
我有这个简单的循环: for($i=$_POST['position'];$i
是否需要良好的TCL代码?如果我们在脚本中不使用“unset”关键字,会发生什么?我应该知道有什么不良影响吗? 我继承了一些旧代码,由于“未设置”而导致的错误-不存在的变量使我无所适从! 最佳答案 通
尝试像这样从数组中删除空值。每次我使用 unset() 时,它都会错过一个键。我知道可能有更好的方法来完成任务,但我需要知道为什么当前代码缺少一些键? $values_arr = array(
我有一个暴露为type = LoadBalancer的服务,当我执行 kubectl describe services servicename, 我得到这个输出: Name: s
我目前正在编写一个 bash 测试框架,在测试函数中,可以使用标准 bash 测试 ([[) 以及预定义的匹配器。匹配器是“[[”的包装器,除了返回返回码外,还设置了一些有意义的消息来说明预期内容。
我正在为全屏背景图像在 WordPress 中编写 CSS。为了摆脱左侧的黑色矩形(菜单/侧边栏),我使用了下面的 CSS。 它在 chrome、IE 和移动设备上运行良好,但在 mac/safa
我有一些非常简单的 HTML,可以在 Chrome 上完美运行,但在 Safari 上却不行。根据网络检查员的说法,我的跨度应该显示绿色文本。但是它显示为黑色。 如您所见,名称“John”显示为黑色。
尝试使用以下代码删除数组(如下所示)中小于 0 的所有元素: ', print_r($arr), ''; ?> 但是,结果是这样的: array(7) { [0]=> int(1) [1]=
如果满足特定条件,我如何从这个“elems”数组中取消设置当前元素? var elems = $('input, select, textarea', this); elems.each(functi
我是一名优秀的程序员,十分优秀!