我正在尝试从所有引用它的集合中删除用户ID。我在表单中引入了一个用户ID,并希望删除每个业务集合中对它的每个引用。我知道下面的查询不起作用,但它显示了我当前的方法。
db.collection('business', function (err, allBus){
allBus.update({}, { $pull: {followers: { userID } } } );
});
这是我的数据,任何想法?
{
"_id" : ObjectId("55355d0ab063708c0b73809e"),
"address" : "Donegal",
"businessName" : "burkes shoes",
"email" : "info@burkes.ie",
"followers" : [
ObjectId("55300f5208224af428d1beaf"),
ObjectId("553129666252d2fc0a4634e4")
],
"gpsLat" : "55.1763595",
"gpsLong" : "-7.7923",
"homeDomain" : "www.burkes.ie",
"imgpath" : "\\images\\uploads\\57461Burkes_logo_1429560586607.jpg",
"password" : "1",
"role" : "business"
}
答案 0 :(得分:1)
如果userID
是一个字符串,则需要先将其强制转换为ObjectID,然后才能在查询中使用它。这样的事情应该是神奇的:
var ObjectID = require("mongodb").ObjectID,
userID = new ObjectId("55300f5208224af428d1beaf");
/*
if userID is a string then this will work
var userID = new ObjectId(userID);
*/
db.business.update(
{"followers": userID},
{
"$pull": { "followers": userID }
},
{ multi: true }
);
上面的查询将比没有查询的更新具有更好的性能,因为它首先过滤在其关注者数组中具有userID
值的元素的文档,然后通过拉{{1}来更新匹配的文档来自数组的值。