Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ruby将值附加到mongodb子集合中的数组?_Ruby_Mongodb_Mongodb Query - Fatal编程技术网

使用ruby将值附加到mongodb子集合中的数组?

使用ruby将值附加到mongodb子集合中的数组?,ruby,mongodb,mongodb-query,Ruby,Mongodb,Mongodb Query,我的文档结构如下 { _id: 32131 names: { current : {value : 1, name: a} prev : [{value : 2, name: b}, {value : 3, name: c} , {value : 4, name: d} ] } } 当我在names字段中获得需要插入的新记录时,我希望在current字段中获得该记录并将其推送到prev数组。然后我想将新记录插入current字段。新记录将

我的文档结构如下

{
   _id: 32131

   names:
   {
      current : {value : 1, name: a} 
      prev : [{value : 2, name: b}, {value : 3, name: c} , {value : 4, name: d} ]
   }


}
当我在
names
字段中获得需要插入的新记录时,我希望在
current
字段中获得该记录并将其推送到prev数组。然后我想将新记录插入
current
字段。新记录将始终具有唯一的

例如,如果我得到一个新记录
{value:5,name:e}
,我希望上面的文档如下所示

   {
       _id: 32131
       names:
       {
          current : {value : 5, name: e} 
          prev : [{value : 2, name: b}, {value : 3, name: c} , {value : 4, name: d}, {value : 1, name: a}]
       }

    }

你在这里试图做的基本上是不合理的,但当然有一个明显的问题。问题是,目前MongoDB无法引用其他字段中的现有值并将其用作更新的一部分

因此,基本JavaScript外壳形式中所需的伪代码是:

db.collection.update(
{u id:32131},
{ 
“$set”:{“names.current”:{“value”:5,“name”:“e”},
“$push”:{”names.prev:{
“value”:this.names.current.value,
“name”:this.names.current.name
}}
}
)
但这当然不存在,也不起作用

我的建议是“将问题转到它的头上”,基本上还将当前值存储在数组中:

{
“_id”:32131,
“姓名”:{
“当前”:{“值”:1,“名称”:“a”}
“修订”:[
{“value”:2,“name”:“b”},
{“value”:3,“name”:“c”},
{“value”:4,“name”:“d”},
{“value”:1,“name”:“a”}
]
}
}
因此,使用数组中已经存在的“当前”值,然后更改数据并添加“当前”非常简单:

db.collection.update(
{u id:32131},
{ 
“$set”:{“names.current”:{“value”:5,“name”:“e”},
“$push”:{“名称.修订版”:{
“价值”:5,
“名称”:“e”
}}
}
)
在客户机或服务器上以某种形式的逻辑进行查询时,始终可以从数组中“过滤”“当前”值

但这是我认为你最好的方法,否则你需要在“写”之前“读”数据以了解数据。这将导致并发问题