如果字段尚未创建为数组,MongoDB似乎将$set
路径用数字组件解释为对象键而不是数组索引。
> db.test.insert({_id: "one"});
> db.test.update({_id: "one"}, {$set: {"array.0.value": "cheese"}});
> db.find({_id: "one"})
{ "_id": "one", "array": { "0" : { "value" : "cheese" } }
我希望得到"array": [{"value": "cheese"}]
,但是它被初始化为一个带有字符串“0”的键的对象。
我可以通过初始化整个数组来获得一个数组,如下所示:
> db.test.update({_id: "one"}, {$set: {"array": [{"value": "cheese"}]}});
...但是这会破坏任何现有属性和之前可能已设置的其他数组元素。
有没有办法说服$set
我希望“数组”成为一个数组类型,具有以下约束:
简而言之,如果“数组”已经初始化为数组,我想要$set: {"array.0.value": ... }
的行为,而不知道它是否有。这可能吗?
答案 0 :(得分:1)
我不确定没有查询是否可行。也许您可以更改架构设计,并尝试这样的事情:
namespace Smawt\Helpers;
use \Pusher;
class PusherConnect
{
protected $app;
public function __construct($app)
{
$this->app = $app;
$pusher = new Pusher(
处理MongoDb中的数组元素(数组中的子文档)很痛苦。 https://jira.mongodb.org/browse/SERVER-1243