我有一个相当复杂的MongoDB运算符,它使用where来查看多个用户以查看它们是否具有某个值,如果是,则更改它的值。我的问题是它检查的值对于不同的情况可能是不同的,所以我的$ set将要求我一起添加字符串以获得我将改变的属性。这就是我的意思:
users.update({$where:function() {
return this.profile.chatInfo.subscribedRooms.hasOwnProperty(findChatroom._id);
}},{$set: {"profile.chatInfo.subscribedRooms."+findChatroom._id:false}},{multi:true}
)
在该代码中唯一不起作用的是$ set中我添加的部分" profile.chatInfo.subscribedRooms。" + findChatroom._id
我尝试的另一件事是制作一个与添加的字符串相等的变量,并使用变量,但它也没有用。
var addedString = "profile.chatInfo.subscribedRooms."+findChatroom._id;
users.update({$where:function() {
return this.profile.chatInfo.subscribedRooms.hasOwnProperty(findChatroom._id);
}},{$set: {addedString:false}},{multi:true}
)
我在这里尝试做的是,无论何时发送聊天消息,都会运行此运算符。它查找订阅了房间的每个用户,并将该值设置为false。值为true或false仅指用户是否已阅读聊天。这将用于通知。
编辑:我的问题不是this的重复,因为MongoDB set命令的工作方式与简单地更改对象属性的值不同。除此之外,MongoDB甚至不能使用object [property]的表示法,因为文档说访问嵌入字段的唯一方法是通过点表示法。
答案 0 :(得分:3)
实际上@BlakesSeven提供的那些链接将解决您的问题。它应该是这样的,
var addedString = "profile.chatInfo.subscribedRooms."+findChatroom._id;
var $set = {};
$set[addedString] = false;
users.update({$where:function() {
return this.profile.chatInfo.subscribedRooms.hasOwnProperty(findChatroom._id);
}}, { $set: $set }, { multi:true })