小编Yan*_*Yan的帖子

MongoDB Node.JS insertOne 错误:“类型‘字符串’无法分配给类型‘ObjectId | 未定义”

我尝试将一个文档插入到集合中,但是当我指定_id插入文档的字段时出现此错误。那么如何插入_id除 之外的类型的文档呢ObjectId

下面的代码给了我这个错误。当我删除 时_id,一切正常,但 _id 将自动生成。我只是希望它是字符串类型。我知道这是可能的。我可以_id使用 MongoDB shell 制作字符串。

async function foo() {
  const users = client.db("test").collection("users")
  users.insertOne({
    _id: "a string",
    name: "Tom",
    age: 26,
  })
}
Run Code Online (Sandbox Code Playgroud)

mongodb node.js typescript

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

移动变量时数据会逐字节复制吗?

我是 Rust 新手,我想知道移动变量时到底会发生什么。

struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let p = Point { x: 1, y: 1 };
    let q = p;
}
Run Code Online (Sandbox Code Playgroud)

当 时let q = p;,数据(大小为 8 字节)是否会从一个内存地址复制到另一个内存地址?由于p已移至此处,因此无法再使用,我认为最好使q' 的底层内存地址等于p' 。换句话说,我认为机器代码中不复制任何内容是可以的。

所以我的问题是:移动变量时数据会逐字节复制吗?如果会,为什么?

rust

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

当两者都有效时,为什么 Rust 编译器建议添加“&”而不是“*”?

我用 Rust 编写了一个简单的程序。这个程序可以编译。

use std::cell::{Ref, RefCell};

fn print_number(x: &i32) {
    println!("x is {}", x);
}

fn main() {
    let stack: i32 = 42;
    let reference: &i32 = &stack;
    let refcell: RefCell<&i32> = RefCell::new(reference);
    let wrapped: Ref<'_, &i32> = refcell.borrow();

    print_number(&wrapped);
    print_number(*wrapped);
}
Run Code Online (Sandbox Code Playgroud)

我可以说出两者都有效的原因:

  1. &有效,因为&wrapped的类型为&Ref<&i32>,可以被解引用强制为&&i32,也可以被解引用强制为&i32
  2. *有效,因为*wrapped相当于*Deref::deref(&wrapped). 我们知道Deref::deref(&Ref<&i32>)结果为&&i32,因此*Deref::deref(&Ref<&i32>)结果为*&&i32,即&i32

似乎第二种方法(使用*)更直接,但是 Rust 编译器建议我使用第一种方法(使用&)。如果我添加一行:

print_number(wrapped);
Run Code Online (Sandbox Code Playgroud)

这当然不能编译。但我对编译器报告感兴趣:

error[E0308]: …
Run Code Online (Sandbox Code Playgroud)

dereference rust

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

标签 统计

rust ×2

dereference ×1

mongodb ×1

node.js ×1

typescript ×1