所以问题是我在相关集合中不再存在的数组和数组中嵌套了对象。搜索到的集合(用户)看起来像
{
"_id" : id,
"locations" : [
{
"_id" : id,
"name" : name
}
]
}
数组与(位置)相关的集合看起来像。
{
"_id" : id,
"name" : name, ..........
}
所以我正在运行一个map函数来获取地图中的所有id和name以将字段缩小到我想要使用的字段
vals = db.locations.find({},{
name : 1,_id : 1}).map(function(a){
return {
name : a.name,_id : a._id
};
})
接下来我想运行类似这样的更新
db.users.update({
"locations" : {
"name" : {$nin : vals.name},
"_id" : {$nin : vals._id}}}, {
"$pull" : {
"array" : {
"name" : {$nin : vals.name},
"_id" : {$nin : vals._id }}}},
{ upsert: false, multi: true
})
但我不知道该怎么做或者甚至可能。
答案 0 :(得分:0)
你应该做的是
vals = db.locations.find({},{name : 1,_id : 1}).map(function(a){return {name : a.name,_id : a._id};})
vals.forEach(function(x){
db.locations.update({ _id: x._id, ...});
});
但是_id必须保持不变。