mongodb update 空 object ({}) 保存为 array ([])

2022 年 4 月 28 日
 HardStone

doc1:

{
   "a": {}
}

查询出来之后添油加醋保存为另外一个 doc, 就变成了

doc2:

{
    "a": []
}

请问有大佬解答一下如何处理吗...

3049 次点击
所在节点    PHP
15 条回复
rust
2022 年 4 月 28 日
请把你"添油加醋"的代码发出来
HardStone
2022 年 4 月 28 日
@rust #1 不是啊, "添油加醋"只是业务需求, 没有改动到这个字段
HardStone
2022 年 4 月 28 日
@HardStone #2 也许我就不应该添油加醋地把"添油加醋"加进去
HardStone
2022 年 4 月 28 日
就是 {} 查询出来是 [], 然后保存的时候要如何保存为原来的 {}, 搜了一些都是答非所问
HardStone
2022 年 4 月 28 日
tf2
2022 年 4 月 28 日
看到标题,心里想,这怕不是用了 php

点进来一看,果然,分区是 php
chendy
2022 年 4 月 28 日
1. 看下 mongo 的库有没有相关配置,不把空对象读取成空数组的(类似 json_decode(json, true)
2. 保存之前自己做判断,如果是空数组,转换成 (object) 存回去
HardStone
2022 年 4 月 28 日
@lambdaq #6 哈哈哈哈
HardStone
2022 年 4 月 28 日
@chendy #7 我也想到了, 但是想想, 也许可以避免存空数组 /空对象这种容易产生歧义的, 直接存 null 就不会有这个问题 /这么多额外步骤
fuchish112
2022 年 4 月 28 日
暂时想到的是 new \stdClass()解决
fkdtz
2022 年 4 月 28 日
这让我想起那天一个帖子,吐槽 json 格式复杂,一会用 [] ,一会用 {} ,还是 PHP 简洁,全都是 [] ... 逃
sujin190
2022 年 4 月 28 日
似乎只能 new \stdClass()了,毕竟 php 想要强行区分空数组还是空字典似乎只能这样,其实吧你要是只是 php 读写似乎这样存问题也不大,就怕你还有换个语言读写的需求那真是坑人
abigeater
2022 年 4 月 28 日
踩过这个坑,我的选择是这个字段干脆就不传了。。。 既然没数据存起来也没啥用。
timonwong
2022 年 4 月 28 日
@lambdaq #6 我第一反应是 lua 🙈
limingxinleo
2022 年 4 月 30 日
var_dump

json_decode(json_encode(new stdClass), true)

你就知道为什么了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/849736

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX