mongodb用变量更新数组

Posted

技术标签:

【中文标题】mongodb用变量更新数组【英文标题】:mongodb update an array with a variable 【发布时间】:2016-06-09 06:40:13 【问题描述】:

我有一系列网站,可以对它们进行投票或反对。在集合中是一个空数组,通过将 userId 插入到数组中来跟踪已经投票的用户

问题:我可以插入用户 ID 甚至用户名,但它只将 id/name 变量存储为当时的字符串。如果我再次点击投票,前一个元素将变为整数。似乎只有当我在它们周围加上“”时,字符串才会保留。但我正在使用一个变量来获取用户 ID/名称。当我把“”放在它周围时,我真的得到“theVariable”,没有帮助。我已经尝试了所有我能想到的......感谢任何帮助。

架构


                url:url, 
                title:title, 
                description:description,
                createdOn:new Date(),
                createdBy:Meteor.user()._id,
                votes: 0,
                upVotes: 0,
                downVotes: 0,
                voted: []
                

代码

"click .js-downvote":function(event)
        // access the id for the website in the database

        var website_id = this._id;
        console.log("Down voting website with id "+website_id);

        //add a  down vote
        var user = Meteor.user()._id;               
        if (user)      
            var theUser = this.voted.push(user);                
            Websites.update(_id:website_id, $inc: votes: 1, $inc:downVotes: -1 , $push:voted: theUser);               
            
           console.log(this.voted);
        return false;// prevent the button from reloading the page
    

每次单击时我都会在控制台得到输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "mWe4r2JcfhRAvn97y"]

首先我得到了字符串,然后对于随后的每次单击,字符串都会向下移动,第一个元素变成一个数字。我每次都需要存储用户标识。所以我可以检查它是否允许投票。

【问题讨论】:

哪一行和哪一个内容将这个记录到控制台?此外,您不需要 三个 .update() 语句,因为它们都应该在一个中,并且确实需要检查用户是否已经在 voted 数组中:.update( "_id": website_id, "voted": "$ne": Mereor.user()._id , "$inc": "votes": 1, "downvotes": -1 , "$push": "voted": Meteor.user()._id ) 还要注意你不想“推动”一个“数组”,而只是这个项目。不确定您的想法是围绕保留另一个数组而不是更新的项目。有点困惑你的问题出在哪里。 我可能怀疑你的 "moves down" 实际上是我刚才提到的将数组插入数组的行为。 所以我包含了日志调用并将我的更新调用都放在了一个中。问题是当我把它合二为一时它不起作用。我把它们分开了,很好。 【参考方案1】:

解决方案:

似乎只有当我在它们周围加上“”时,字符串才会保留。但 我正在使用一个变量来获取用户 ID/名称。当我在它周围加上“” 我真的得到了“theVariable”,没有帮助。

如果您使用的是 ES6 或更高版本的 JS,则可以使用字符串插值。您必须使用反引号(`)而不是单引号(')。

例子:

var name = "Rose";
console.log(`"My name is $name"`);

输出:

"My name is Rose"

在你的代码中这样做:

 Websites.update(_id:website_id, $push:voted: `"$theUser"`);

它被插值到:

Websites.update(_id:website_id, $push:voted: "userid within quotes");

您将获得包括在内的报价。使用此方法替换您的查询

【讨论】:

谢谢!我知道有些东西带有引号可以让它正常工作,但我不记得也找不到答案。

以上是关于mongodb用变量更新数组的主要内容,如果未能解决你的问题,请参考以下文章

如何批量更新 MongoDB 字符串数组以用连字符替换空格?

mongodb更新查询删除命令中指定的字段以外的所有数组字段

mongodb更新查询删除命令中指定的字段以外的所有数组字段

子数组中的 MongoDB 更新查询

流星mongodb用_id插入一个嵌套的对象数组

使用 Spring Data MongodB 更新嵌入式 mongodb 文档中的数组字段?