【问题标题】:Restrict query to get all items with specific pointer (JavaScript - Parse.com)限制查询以获取具有特定指针的所有项目 (JavaScript - Parse.com)
【发布时间】:2016-02-04 22:51:00
【问题描述】:
BlogApp.Collections.Blogs = Parse.Collection.extend({
    model: BlogApp.Models.Blog,
    query: (new Parse.Query(BlogApp.Models.Blog)).equalTo("author", "xMQR0A1Us6").descending('createdAt').limit(9)
});

上述方法似乎不起作用。我可以对类中已经存在的列执行各种操作,例如 .equalTo("productType", "SHIRT"),但我无法链接到存在于单独类 User 中的作者。

如何限制查询仅从“作者”(指针)中检索与 User 类中存在的 objectId 相等的项目?

型号:

BlogApp.Models.Blog = Parse.Object.extend('MarketDesign', {

    update: function(form) {

        if ( !this.get('ACL') ) {
            var blogACL = new Parse.ACL(Parse.User.current());
            blogACL.setPublicReadAccess(true);
            this.setACL(blogACL);
        }

        BlogApp.category.id = form.category;

        this.set({
            'title': form.title,
            'url': form.title.toLowerCase()
            .replace(/[^\w ]+/g,'')
            .replace(/ +/g,'-'),
            'category': BlogApp.category,
            'comment': form.content,
            'author': this.get('author') || Parse.User.current(),
            'authorName': this.get('authorName') || Parse.User.current().get('username'),
            'time': this.get('time') || new Date().toDateString()
        }).save(null, {
            success: function(blog) {
                Parse.history.navigate('#/admin', { trigger: true });
                window.location.reload();
            },
            error: function(blog, error) {
                console.log(error);
            }
        });
    }

});

【问题讨论】:

    标签: javascript parse-platform collections


    【解决方案1】:

    objectId(它只是一个字符串)和指针之间存在区别。要使查询中的指针列相等,您必须传递一个解析对象。因此,例如,要查找作者是当前用户的博客...

    var user = Parse.User.current();   // no .id, that's important!
    BlogApp.Collections.Blogs = Parse.Collection.extend({
        model: BlogApp.Models.Blog,
        query: (new Parse.Query(BlogApp.Models.Blog)).equalTo("author", user).descending('createdAt').limit(9)
    });
    

    如果你只有objectId,然后用它构建一个对象,像这样:

    var user = Parse.User.createWithoutData("xMQR0A1Us6"); 
    

    但我不建议这样做。如果您有一个对象 ID,那么您必须曾经拥有它所属的整个对象。一般来说,保留对象 ID 是一种习惯;相反,请保留它们所属的对象,以便您以后可以使用它们的任何部分。

    【讨论】:

    • 这行:var user = Parse.User.createWithoutData("xMQR0A1Us6"); 直接杀死我的应用程序是否有任何一般原因?
    • 这就是如何从一个id创建一个用户。很惊讶它会导致崩溃
    • 我在控制台中收到TypeError: Parse.user is undefined
    • 用户有一个大写的U。
    • 考虑到用户只是我们定义的一个变量,这真的重要吗?
    【解决方案2】:

    我做了一些研究,发现不能使用 .equalTo 方法查询指向的类中的元素:https://coderwall.com/p/-uzbrq/multi-dimensional-querying-parse-com-javascript-sdk

    这不是答案,因为它不能解决我的问题,但希望其他人会看到这个并更好地了解我正在尝试完成的工作:

    BlogApp.Collections.UserDesigns = Parse.Collection.extend({
        model: BlogApp.Models.Blog,
        query: (new Parse.Query(BlogApp.Models.Blog)).matchesQuery("author", Parse.User.current().id).descending('createdAt').limit(3)
    });
    

    【讨论】:

    • 您是否要查找博客作者是当前用户的博客?这很容易(并在我的回答的第一部分中进行了描述)。我的答案的另一部分涉及 OP 中的 id xMQR0A1Us6。该 id 属于哪个用户,您从哪里获得的?我已经编辑了我的答案以澄清。要查询作者 == 当前用户,您在此答案中输入的代码非常接近。关键是,我们传递 objects 来与指针字段进行比较。
    • 此外,您网站的帖子处理的问题比您在此处尝试解决的问题更复杂。一旦你掌握了如何处理指针的窍门,你想做的事情就很常见了。
    • 以 X 开头的 Id 只是随机用户的对象 Id。我正在测试不同的查询。该查询将用于用户的个人资料,显示他们的所有帖子。所以至少在查看自己的时候,你会想要当前用户的 objectId。
    • 使用我(已编辑)答案中的代码尝试当前用户。这应该向您表明它有效(如果您有当前用户的博客)。然后我们接下来会处理随机用户。
    • 非常感谢!是的,这非常有效。我没有意识到我不能只查询列中出现的“字符串”,因为出现的值本身不是字符串,而是连接类的标识符。干杯。
    猜你喜欢
    • 2016-10-28
    • 2021-08-09
    • 2020-07-21
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2022-11-24
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多