如何连接MongoDB $ set

时间:2016-03-24 01:52:50

标签: mongodb meteor

我有一个相当复杂的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]的表示法,因为文档说访问嵌入字段的唯一方法是通过点表示法。

1 个答案:

答案 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 })