小编Dya*_*yan的帖子

如何使用mongoose find获取包含字符串一部分的所有值?

我有使用mongoose从MongoDB检索数据的以下问题.

这是我的架构:

const BookSchema = new Schema(
    {
        _id:Number,
        title:String,
        authors:[String],
        subjects:[String]   
    }
);
Run Code Online (Sandbox Code Playgroud)

你可以看到我在对象中嵌入了2个数组,让我们说作者的内容可以是这样的:作者:["Alex Ferguson","Didier Drogba","Cristiano Ronaldo","Alex"]
我是什么我想要实现的是获得阵列中的所有Alex.

到目前为止,我已经能够获得值,如果它们完全匹配值.但是,如果我试图获得包含Alex的那些答案总是[].

我想知道的是我如何使用find()执行此操作而不执行map-reduce来创建视图或集合,然后对其应用find().

这里的代码适用于完全匹配

Book.find( {authors:req.query.q} , function(errs, books){
            if(errs){
                res.send(errs); 
            }

            res.json(books);
        });
Run Code Online (Sandbox Code Playgroud)

我尝试了一些但没有运气{authors:{$ elemMatch:req.query.q}} {authors:{$ in:[req.query.q]}}

这个给了我一个错误,而且最重要的是我在这里发现的另一篇文章效率非常低.{$ where:this.authors.indexOf(req.query.q)!= -1}

我也试过{作者:{$ regex:"./ value/i"}}

map-reduce工作正常,我需要使用其他方法使其工作,看哪哪个更好?

任何帮助是极大的赞赏.我确信这很容易,但我是NodeJS和Mongo的新手,我无法自己解决这个问题.

regex mongodb node.js mongodb-query aggregation-framework

30
推荐指数
2
解决办法
5万
查看次数

如何使用Firestore创建多环境DB

我一直在寻找如何在Firebase中创建多个Firestore实例,我需要不同的Db用于prod,staging和development.我阅读了文档,似乎我只需要修改应用程序中的"Google-services.json"文件.我没有得到的是我应该修改什么以及它在控制台中的外观.

  • 我是否会在同一个项目中看到不同的实例?

  • 我需要为每个环境创建不同的项目并修改文件中的这些值?

  • 如果我需要测试需要在所有环境中进行测试的东西,并且所有这些都要求Blaze运行该测试我是否必须支付Triple?

提前致谢

firebase google-cloud-firestore

14
推荐指数
4
解决办法
4841
查看次数

如何检查文档是否包含 Cloud Firestore 中的属性?

我想知道是否有办法检查 Cloud Firestore 文档中是否存在属性。类似的东西document.contains("property_name")或者是否存在文档属性。

node.js firebase google-cloud-firestore

10
推荐指数
1
解决办法
9426
查看次数

该注册令牌不是有效的FCM注册令牌

我正在尝试使用从Android设备中PassWallet应用程序中保存的票证中获得的令牌向设备发送消息。

设备使用苹果的钱包规格发送更新通行证所需的所有信息。但是,我正在使用FCM发送通知,但出现此错误:“注册令牌不是有效的FCM注册令牌”

{
errorInfo: 
   { code: 'messaging/invalid-argument',
     message: 'The registration token is not a valid FCM registration token' },
  codePrefix: 'messaging' 
}
Run Code Online (Sandbox Code Playgroud)

我用来发送消息的代码是Admin SDK示例中的代码:

var message = {
        token: device.pushToken
      };

      admin.messaging().send(message)
        .then((response) => {
          console.log('Successfully sent message:', response);
        })
        .catch((error) => {
          console.log('Error sending message:', error);
        });
Run Code Online (Sandbox Code Playgroud)
  • 我不确定我的讯息是否不完整,是否还需要其他内容。

  • 如果令牌已过期(您可以在Firebase上进行验证)。

  • 如果消息需要指定是Android,iOS(APNS)等...

这是完整的堆栈跟踪:

Error: The registration token is not a valid FCM registration token
    at FirebaseMessagingError.FirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:39:28)
    at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:85:28)
    at new FirebaseMessagingError (/srv/node_modules/firebase-admin/lib/utils/error.js:241:16)
    at Function.FirebaseMessagingError.fromServerError (/srv/node_modules/firebase-admin/lib/utils/error.js:271:16) …
Run Code Online (Sandbox Code Playgroud)

firebase passkit firebase-cloud-messaging

5
推荐指数
1
解决办法
2979
查看次数

如何使用云函数中的 response.sendFile 从云存储发送文件?

我正在尝试使用来自 firebase 云功能的 http 触发器将响应发送回客户端。当我使用 Cloud Storage 中的文件位置发送响应时,sendFile 方法会引发此错误:

"path must be absolute or specify root to res.sendFile"

res.sendFile(obj.path(param1, param2, param3, param4));
Run Code Online (Sandbox Code Playgroud)

obj.path(param1, param2, param3, param4) 这将使用参数构建 gs:// 或 https:// 的路径。

然后我决定这样做:

const rp = require("request-promise");

exports.fun = functions.https.onRequest( async (req, res) => {
let extResponse = await rp('firebase storage location');
          extResponse.pipe(res);
});
Run Code Online (Sandbox Code Playgroud)

rp 现在返回此错误:

StatusCodeError: 403 - "{\n  \"error\": {\n    \"code\": 403,\n    \"message\": \"Permission denied. Could not perform this operation\"\n  }\n}"
Run Code Online (Sandbox Code Playgroud)

此错误是因为云存储需要对请求进行身份验证才能让服务从存储中下载文件。

有没有办法完成这项工作并将文件返回给客户端?

google-cloud-storage firebase google-cloud-functions

4
推荐指数
1
解决办法
1589
查看次数

解析 firestore 的响应不起作用

大家好,我正在尝试解析从 firestore 中的集合返回的对象

val user = userSnapshot.toObject(User::class.java)
Run Code Online (Sandbox Code Playgroud)

用户对象如下所示:

data class User(var companyId: String = "",
                var email: String = "",
                var isActive: Boolean = false,
                var isSuperUser: Boolean = false,
                var superUserId: String = "",
                var userId: String = ""): Parcelable {

    constructor(parcel: Parcel) : this(
            parcel.readString(),
            parcel.readString(),
            parcel.readByte() != 0.toByte(),
            parcel.readByte() != 0.toByte(),
            parcel.readString(),
            parcel.readString()) {
    }

    override fun writeToParcel(parcel: Parcel, p1: Int) {
        parcel.writeString(companyId)
        parcel.writeString(email)
        parcel.writeByte(if (isActive) 1 else 0)
        parcel.writeByte(if (isSuperUser) 1 else 0)
        parcel.writeString(superUserId)
        parcel.writeString(userId)
    } …
Run Code Online (Sandbox Code Playgroud)

android kotlin google-cloud-firestore

2
推荐指数
1
解决办法
437
查看次数

如何在嵌套片段中获取Activity?

我正在尝试在ViewPager中包含的片段中调用getActivity()活动,并且此ViewPager包含在Fragment中.我需要在这些片段中调用此活动的一些方法,但getActivity总是为这些片段返回NULL.

我不知道这是否是一个好方法,但我需要视图寻呼机包含的片段根据操作栏操作更新其内容并显示消息说完或出现错误.

对此的帮助将不胜感激.

这是代码:

内部碎片:

    public class ReportSessionsFragment extends ReportPageFragment implements IUpdateView {

    private static final String TAG = ReportSessionsFragment.class.getSimpleName();

    private Sessions fSessions;

    private List<Report> reportList = null;
    private ReportsAdapter adapter = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        settings = ((BaseActivity)getActivity()).settings;
    }

    @Override
    public void onStart() {
        super.onStart();
        setCounter(db.getSessionsCount());

        if(settings.getSelectedRoom() != null){
            reportList = db.getSessionsByRoom(settings.getSelectedRoom().getName(),
                    settings.getStatusSelectedList());
            adapter = new ReportsAdapter(getActivity(), reportList, EReport.Sessions);
            mRecyclerView.setAdapter(adapter); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments fragmentstatepageradapter

1
推荐指数
1
解决办法
4189
查看次数