小编Ana*_*via的帖子

如何允许Joi中的任何其他键

我有一个简单的要求.我试图在互联网上搜索以及文档,但失败了.
所以这就是我想要实现的目标:

我有一个架构:

const schema = Joi.object().keys({
  a: Joi.string().required(),
  b: Joi.string().required()
});
Run Code Online (Sandbox Code Playgroud)

现在,我如何配置它以允许对象中的任何其他键?

使用此架构,它只允许两个键ab.如果我传递任何其他密钥,比如说,c它会抛出一个错误,说c不允许这样做.

javascript hapijs joi

15
推荐指数
2
解决办法
7470
查看次数

将数组长度保存在额外的 MongoDB 字段中

根据这个答案,我试图找出数组的大小并将其保存在额外的字段中。

我有一个集合user_details,文档结构类似于:

{
    user_id : 1,
    likes : [1,2,3,4],
    likes_count : 0
}
Run Code Online (Sandbox Code Playgroud)

我正在使用的查询如下:

db.user_details.update({user_id : 1},{$set:{ likes_count : this.likes.length }})
Run Code Online (Sandbox Code Playgroud)

但是,它会抛出错误

"message" : "Cannot read property 'length' of undefined"
Run Code Online (Sandbox Code Playgroud)

如何在额外字段中保存数组的长度?

PS:我使用的是 MongoDB 3.4

mongodb mongodb-query

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

平衡石头

你有许多已知重量为w1,...,wn的宝石.编写一个程序,将石头重新排列成两堆,使两桩之间的重量差异最小.我有dp算法:

int max(int a, int b){
    return a >= b ? a : b;
}

int diff(int* weights, int number_elements, int capacity){
    int **ptrarray = new int* [capacity + 1]; 

    for (int count = 0; count <= capacity; count++) {
        ptrarray[count] = new int [number_elements + 1];
    }

    for (int i = 0; i <= number_elements; ++i){
        ptrarray[0][i] = 0;
    }

    for (int i = 0; i <= capacity; ++i){
        ptrarray[i][0] = 0;
    }

    for (int i = 1; i …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm dynamic-programming

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

使用关系/关联查询时未执行 Sequelize afterFind 挂钩

我有两个型号UserEmailEmail有一个来自 的外键User
数据库中的电子邮件值在保存到数据库之前会被加密。当检索电子邮件时,它会被解密。因此,电子邮件在数据库中永远不会以纯文本形式存在,但在 API 中使用时可以以纯文本形式存在。我正在使用钩子来实现该功能。

我指定的钩子如下:

hooks: {
    /**
     * The query will have plain text email,
     * The database has encrypted email.
     * Thus, encrypt the query email (if any) BEFORE the query is fired
     **/
    beforeFind: query => {
        if (query && query.where && query.where.email) {
            const email = query.where.email;
            const AESHash = AES.encrypt(email, KEY, { iv: IV });
            const encrypted = AESHash.toString();
            query.where.email = encrypted;
            console.log(`[hook beforeFind] …
Run Code Online (Sandbox Code Playgroud)

node.js sequelize.js

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

$ setUnion从多个文件MongoDB合并数组

我在一个集合中有文件如下:

{ _id : 1 , data : [7,4,0] }
{ _id : 2 , data : [4,5,6] }
{ _id : 3 , data : [6,7,8] }
Run Code Online (Sandbox Code Playgroud)

我想data从两个或更多文档中联合数组.

我用来查找1和2 data数组的id并集的查询是:

db.coll.aggregate(
{
    $match : {
        _id: { $in: [1, 2] }
    }
},
{
    $group: { 
        _id: 0,
        s0: { $first: "$data"}, 
        s1: { $first: "$data"}
    }
},
{
    $project: {
        _id: 0,
        ans: { $setUnion: [ "$s0","$s1"]}
    }
}
).pretty()
Run Code Online (Sandbox Code Playgroud)

但查询结果如下:

{7, 5, …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

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

如何检查用户是否已登录?

我是react-nativeFacebook和新手sdk

所以我按照这里给出的教程,一切正常,用户可以使用Facebook登录.

我的问题是:

下次打开应用程序时,如何检查用户是否已登录?

onLoginFinished无论用户是否已经登录,我都认为每次都会调用回调.但事实并非如此.如果用户已登录,则onLoginFinished未调用.是否有任何特定的回调来检查?或任何其他方法或一些解决方法?

我试着阅读react-native-fbsdk 这里的文档,但似乎还不够.

这是Login按钮:

<LoginButton
    onLoginFinished={ (error, result) => { this.handleLogIn(error, result) } }
    onLogoutFinished={() => { this.handleLogOut() } } 
/>
Run Code Online (Sandbox Code Playgroud)

辅助函数:

handleLogIn(error, result) {
    if (error) {
        alert("Login failed with error: " + result.error);
    } else if (result.isCancelled) {
        alert("Login was cancelled");
    } else {
        alert("Login was successful")
        AccessToken.getCurrentAccessToken().then(
            (data) => {console.log(data);} //Refresh it every time
        );
    }
}

handleLogOut() {
    console.log("User logged out");
    alert("Log …
Run Code Online (Sandbox Code Playgroud)

react-native react-native-fbsdk

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

java.time.format.DateTimeParseException:无法在索引处解析文本

这看起来是一件非常简单的事情,但我没有这样做。

我有一个字符串模式,yyyyMMddHH我正在尝试解析2021061104LocalDateTime

这是代码:

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;


class Main {
    public static void main(String[] args) {
        String pattern = "yyyyMMddHH";
        String date = "2021061104";
        DateTimeFormatter formatter =
            new DateTimeFormatterBuilder()
                .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
                .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
                .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
                .parseLenient()
                .appendPattern(pattern)
                .toFormatter();
        LocalDateTime ldt = LocalDateTime.parse(date, formatter);
    }
}
Run Code Online (Sandbox Code Playgroud)

它抛出这个异常:

Exception in thread "main" java.time.format.DateTimeParseException: Text '2021061104' could not be parsed at index 8
        at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
        at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
        at …
Run Code Online (Sandbox Code Playgroud)

java java-time java.time.localdatetime

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