Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 让发布返回修改的/quot;假/非数据库数据,仍可由客户端查询_Database_Meteor_Subscription_Meteor Publications - Fatal编程技术网

Database 让发布返回修改的/quot;假/非数据库数据,仍可由客户端查询

Database 让发布返回修改的/quot;假/非数据库数据,仍可由客户端查询,database,meteor,subscription,meteor-publications,Database,Meteor,Subscription,Meteor Publications,标准出版物的外观如下所示: Meteor.publish('suggestions', function(query){ return MyDB.find({param: query}); } 一旦订阅了结果,就可以通过简单的操作MyDB.find(…)在客户端访问结果 但是,我将如何实施 (a) 某种预处理,意味着我在服务器端向查询的文档添加或删除某些属性,然后客户端仍然可以查询这些属性 (b) 返回假数据,即遵循数据库架构的数据仍然可以在客户端查询,但实际上不存在于服务器端 例如:

标准出版物的外观如下所示:

Meteor.publish('suggestions', function(query){
    return MyDB.find({param: query});
}
一旦订阅了结果,就可以通过简单的操作
MyDB.find(…)在客户端访问结果

但是,我将如何实施

(a) 某种预处理,意味着我在服务器端向查询的文档添加或删除某些属性,然后客户端仍然可以查询这些属性

(b) 返回假数据,即遵循数据库架构的数据仍然可以在客户端查询,但实际上不存在于服务器端

例如:

Meteor.publish('suggestions', function(query){
    //Stuff in database: [{prop1: 'first'}, {prop1: '2nd'}]
    if(query == 'something') { //Fake data
        return [{prop1: 'hello', prop2: 42}];
    } else {
        result = MyDB.find().fetch();
        result.forEach(function(element) {
            element.prop2 = random_number;
        }
        return result;
    }
}
因此,如果我同意客户的“建议”,我希望看到以下内容:

//Subscribed with query 'something':
var arr = MyDB.find().fetch();
//arr equals [{prop1: 'hello', prop2: 42}]

Subscribed with another query
var arr = MyDB.find().fetch();
//arr equals [{prop1: 'first', prop2: random_number}, {prop1: '2nd', prop2: random_number}]
基本上,如上所述,我希望在将数据库数据发送到客户机之前稍微修改或完全修改数据库数据,但是客户机应该能够像直接从数据库查询数据一样进行查询


我该怎么做呢?

我相信

我也有类似的需求,这个答案帮助了我。 您应该直接操作属性“added”、“changed”、“ready()”等


或者甚至评估使用“Meteor.call()”是否更好。

我回答了来自

我在答案中加入了参考和指南

请注意,该问题中的客户端订阅服务器是在React.js中实现的,但我认为在服务器端发布数据的方式几乎相同


在客户端更改文档后,是否存在任何安全隐患?如果不是,我建议您在客户端而不是服务器上对数据进行后期处理,以确保服务器集合的数据完整性。是的-我要修改的数据是动态的,因为它取决于其他集合的状态,我不希望用户访问这些集合。(甚至不是因为用户会看到重要数据,而是因为我必须向用户发送太多数据)谢谢您的回答。我确实考虑过使用Relay. Calk,但由于种种原因,我决定反对它,其中一半甚至我都不记得了。我会看看我是否能实现你链接到我的项目中的答案。