使用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”
}}
}
)
在客户机或服务器上以某种形式的逻辑进行查询时,始终可以从数组中“过滤”“当前”值
但这是我认为你最好的方法,否则你需要在“写”之前“读”数据以了解数据。这将导致并发问题